2016-09-01 7 views
-1

Microsoft SQL Server 2012에서 프로 시저를 만들지 만 문제가 있습니다. 오류 메시지는 다음과 같습니다 문자열에서 날짜 및/또는 시간을 변환 할 때SQL Server : 문자열에서 날짜 및/또는 시간을 변환하지 못했습니다.

메시지 241, 수준 16, 상태 1, 줄 4
변환에 실패했습니다.

여기 내 절차 :

DECLARE @name varchar(255) 

SELECT name 
FROM sysobjects 
WHERE type = 'P' 
    AND (name LIKE 'pr_My_app_log_%' OR name LIKE 'pr_My_item_log_%') 
    AND (DATEDIFF(dd, getdate(), RIGHT(name, 8)) < -2) 

내 데이터베이스에이 이름을 가진 절차가 있습니다

pr_My_app_log_20160830 
pr_My_app_log_20160829 

그것은 DATEDIFF에 뭔가해야한다. 누군가가 질문을 수정하고 문제를 조금 설명 할 수 있습니까?

감사합니다.

+1

이다. datediff 술어가 코드에서 마지막이기 때문에 엔진이 마지막으로 검사를 수행한다는 것을 의미하지는 않습니다. –

+0

이것은 완벽 할 수는 없지만 목적에 충분히 부합 할 것입니다 : '20 (0-9) [0-9] [0-1] [0-1]과 같은 오른쪽 (이름, 8) (name, 8) end <-2' – shawnt00

답변

1

개체 이름의 마지막 8자를 DATETIME으로 구문 분석 할 수 없으면 DATEDIFF 함수를 숫자가 아닌 값으로 전달합니다. 당신의 where 절에 검사를 추가

봅니다 : 올바른 8 문자가 유효한 날짜 수없는 위치를 sysobjects의 행을 가지고 있기 때문에

SELECT name 
FROM sysobjects 
WHERE type = 'P' 
AND (name LIKE 'pr_My_app_log_%' OR name LIKE 'pr_My_item_log_%') 
AND TRY_CONVERT(DATETIME, RIGHT(name, 8)) IS NOT NULL -- check for non-numeric 
AND (DATEDIFF(dd, GETDATE(), RIGHT(name, 8)) < -2) 
+0

datediff() 안에'try_parse()'를 넣을 필요가있다. '. – shawnt00

관련 문제