2016-10-10 1 views
0

where 절의 getdate()와 비교하기 위해 varchar에 포함 된 날짜를 가져 오려고합니다. VARCHAR를 변수는 항상 다음과 같습니다어디서나 caluse가있는 SQL Server 하위 문자열

마지막 접속 : MM/DD/YY

일부 샘플 데이터 :

Last Seen: 07/12/16 
Last Seen: 08/01/16 
Last Seen: 07/22/16 
NULL 
NULL 
NULL 
NULL 
Last Seen: 07/28/16 

날짜에 VARCHAR를 변환하고 일의 차이를 발견 아래 작품 :

datediff(day,CAST(substring(CA_NOTE, 12, 8) as datetime), getdate()) as dayspassed 

내가이 코딩을 붙일 때 문제는, where 절은 getdate()와 날짜를 비교하기 위해 동일한 오류가 계속 발생합니다. 문자열에서 날짜 및/또는 시간을 변환 할 때

where datediff(day,CAST(substring(CA_NOTE, 12, 8) as datetime), getdate()) > 90 

메시지 241, 수준 16, 상태 1, 줄

3 변환에 실패했습니다.

SQL Server 2014 Management Studio를 실행하고 있습니다.

는 TRY_PARSE를 사용

destination-data의 제안 일 계정으로 댓글을 수정 됨! 모두에게 감사드립니다.

+1

몇 가지 샘플 데이터를 제공 할 수 있습니까? – GuidoG

+0

댓글 주셔서 감사합니다. 날짜, CAST (datetime과 같은 부분 문자열 (CA_NOTE, 12, 8), getdate())> 90 은 이전과 같은 오류 메시지를 표시합니다. – Adam

+0

... 이제 다른 질문이 있음을 의미합니다. 이 새로운 버전은 * ok *로 보이므로 @GuidoG와 우리가 작업 할 수있는 샘플 데이터를 보여 달라는 그의 요청으로 되돌아 갈 것입니다. –

답변

1

SQL은 getdate()-90을 어떻게 처리 해야할지 모릅니다 - 90 일을 뺍니까? 90 분? 90 년?

예를 들어 dateadd과 같은 기능을 사용해야합니다.

where convert(varchar(30),cast(substring(CA_NOTE, 12, 8) as datetime),102) < dateadd(dd, -90, getdate()) 
+0

@bassrek는 문제를 해결합니다. 내 문제는 다음 문제를 해결합니다. –

1

문제는 여전히 VARCHAR으로 변환하는 것입니다. 대신 다음을 시도하십시오.

CAST(substring(CA_NOTE, 12, 8) as datetime) 
+0

좋은 캐치. 이 쿼리에 여러 문제가 있습니다! –