2013-10-18 4 views
2

을주고 난 다음 쿼리 한 : EFFECTIVE_DATE은 VARCHARSQL 서버 날짜 변환 오류

select A.ACCOUNT_NUM, 
     convert(date, B.EFFECTIVE_DATE, 112) as 'EFFECTIVE_DATE', 
     B.INTEREST_RATE 
from Table1 A 
left join Table2 B 
on A.ACCOUNT_NUM = B.ACCOUNT_NUM 

ACCOUNT_NUM이 두 테이블에 VARCHAR (12) (8) 및 형식의 '20131018' 이 저를주고있다 '날짜 및/또는 시간 문자열을 변환 할 때 변환이 실패했습니다'. 변환없이 쿼리를 실행하면 정상적으로 실행됩니다.

그러나 ISDATE()를 사용하여 EFFECTIVE_DATE의 내용을 확인 했으므로 여기에는 문제가 없습니다. 또한 , 다음 작업을 수행 할 경우 :

select A.ACCOUNT_NUM, 
     B.EFFECTIVE_DATE, 
     B.INTEREST_RATE 
into #temp 
from Table1 A 
left join Table2 B 
on A.ACCOUNT_NUM = B.ACCOUNT_NUM 


select convert(date, EFFECTIVE_DATE, 112) 
from #temp 

는 올바르게 오류없이 날짜 형식으로 열을 변환합니다. 내가 무엇을 놓치고 있는지, 그것은 나를 미치게하고있다. 그리고 나는 그것이 매우 단순한 것이라고 확신한다!

감사합니다.

답변

1

DATESTRING type fields에 저장하면 이러한 종류의 문제가 발생할 수 있습니다. 너의 란에으로 변환 할 수없는 1 개 2 개의 끈이 있을지도 모른다. CASE으로 시도해보고 데이터가 있는지 확인하십시오. 당신이 2000-01-01 어떠한 EFFECTIVE_DATE 값을 얻을 경우

SELECT A.ACCOUNT_NUM, CASE WHEN ISDATE(B.EFFECTIVE_DATE) THEN CONVERT(DATE, B.EFFECTIVE_DATE, 112) ELSE CONVERT(DATE, '20000101', 112) END AS 'EFFECTIVE_DATE', B.INTEREST_RATE FROM Table1 A LEFT JOIN Table2 B ON A.ACCOUNT_NUM = B.ACCOUNT_NUM 

, 즉 당신이 그 문자열 값을 분류하는 것을 의미합니다.

SELECT B.ACCOUNT_NUM, B.EFFECTIVE_DATE 
FROM Table2 B 
WHERE ISDATE(B.EFFECTIVE_DATE) = 0 
+0

나는 그 제안을 모두 시도했지만 예외는 발견되지 않았다. –

+0

첫 번째 쿼리에서 오류가 발생 했습니까? – Kaf

+0

아니 모든 올해 반환 된 올해 예상대로 –

0

방금 ​​스키마를 다시 작성하고 쿼리를 실행 했으므로 정상적으로 작동했습니다. 의심의 여지없이 문제는 Table2.EFFECTIVE_DATE 열의 잘못된 형식의 문자열입니다.

+0

이 EFFECTIVE_DATE 열에 형식이 잘못된 문자열이 또한 내가 생각 게시 두 번째 코드 블록에서 오류를 제공하지 않을까요 :

또한, 행이 문제가 발생하는 찾아 쿼리 아래에 시도 할 수 있습니다? 두 번째 것은 정상적으로 작동하기 때문에 –

+0

변환이 일어나지 않으므로 VARCHAR 값을 임시 테이블의 새 VARCHAR 열에 복사하고 있습니다. –

+0

죄송합니다. #temp에서 선택 변환을 실행해도 괜찮습니다. –