2017-05-23 11 views
-1
SELECT AcquistionDate = CONVERT(NVARCHAR, 
         CASE 
          WHEN D.CalendarDate NOT IN ('01/01/1900','12/31/9999') 
           THEN D.CalendarDate 
          WHEN ac.FirstAccountOpenDate NOT IN ('01/01/1900', '12/31/9999') 
           THEN ac.FirstAccountOpenDate 
         END, 126) + 'Z 
from TABLE; 

를 개종자 문을 이해하려고 노력하고나는 오류를 얻고 저장 프로 시저를 디버깅 및 사례

8114 메시지, 수준 16, 상태 5, 줄 1
오류 변환하는 데이터 유형 VARCHAR

+0

CalendarDate 및 FirstAccountOpenDate 열의 데이터 형식은 무엇입니까? 실제 날짜/시간 필드입니까? 또한 SQL이 유효하지 않아 복사/붙여 넣기에서 잘린 것처럼 보입니다. –

+0

이 저장 프로 시저가 작동합니까? 저장 프로 시저를 디버깅한다고 할 때이 코드를 상속 받거나 작성 했습니까? 당신이 상속했다면, 나는 당신이 실제로 돌려 주길 원하는 것을 알아 내고 그것을 처음부터 다시 작성한다고 말할 것입니다. 당신이 직접 썼다면, 여기에서하려고하는 도대체를 우리에게 알려주십시오. –

+0

마침내 SP의 다른 줄에 문제가 있음을 알게되었습니다. 문제가 줄 1에 있다는 오류 메시지로 인해 잘못 읽었습니다. SP의 임시 테이블 대신 하위 쿼리를 사용하면서 SP 내부에 여러 하위 쿼리가있었습니다. 기본적으로 테스터 것들 :) –

답변

0

CONVERT(NVARCHAR....) 날짜를 소요 형식 126 yyyy-mm-ddThh:mi:ss.mmm

에 NVARCHAR로 변환하는 BIGINT

그러나 그때 당신은 +'Z from table 있습니다 복사 붙여 넣기 오류가 있다고 가정하고 그 작은 따옴표가 거기에 있어야하지 않으며 실제로는 + Z from Table 내가 어떤 경우에 Zbigint입니다 가정합니다. 어느 NVARCHARBIGINT에 추가하려고합니다. 즉, NVARCHAR이 먼저 BIGINT으로 변환되면 날짜가 아닌 숫자의 문자열 표현이기 때문에 실패합니다.

코드 나 DB 구조에 대해 더 많이 알지 못하는 다른 사람은 실제로 표현의 날짜 필드 중 하나가 BIGINT이고 문자열을 날짜 표현과 비교할 때 거기에서 대화가 실패한다는 것입니다.

그러나 저는 크리스 버거 (Chris Berger)의 의견에 동의합니다. 매우 다른 방식으로 작성되어야하는 것처럼 보입니다.