2013-11-15 1 views
1

숫자 열에 저장된 날짜가있는 테이블의 특정 데이터를 쿼리하는 SQL 쿼리가 있습니다. 아래의 쿼리를 사용하여 숫자 날짜를 실제 날짜로 변환하지만 숫자 값이 0 인 즉, 시작 날짜가 2013 년 10 월 31 일이고 종료 날짜가 0 인 것을 의미하는 인스턴스가 있습니다. 공개 기록입니다. 오류 캐치를 추가 할 수있는 방법이 있습니까? 값이 0이면 그냥 0 또는 '열기'만 반환하고 계속 하시겠습니까?SQL 숫자와 날짜 (예외)

SELECT WMACCT# as 'Account #', CONVERT(Date, CONVERT(Varchar(8),OPENDT),104) 
as 'Open Date', 

CONVERT(Date, CONVERT(Varchar(8),CLDT),104)as 'Close Date'From 
server.server 
+1

사례 끝점 – LINQ2Vodka

답변

2

당신은 날짜가 0 일 때 원하는 값을 설정하고 나머지 값을 위해 무엇을하고 있는지 할 때 CASE를 사용할 수 있습니다

SELECT WMACCT# AS 'Account #', 
    CASE 
    WHEN OPENDT = 0 THEN '2013-10-31' 
     ELSE CONVERT(DATE, CONVERT(VARCHAR(8), OPENDT), 104) 
    END AS 'Open Date', 
    CASE 
    WHEN DATE = 0 THEN NULL 
     ELSE CONVERT(DATE, CONVERT(VARCHAR(8), CLDT), 104) 
    END AS 'Close Date' 
FROM SERVER.SERVER 
+0

이것은 완벽합니다! 나는 내가 필요로하는 것에 그것을 편집했다. 그리고 그것은 크다! 내가 upvote/최고의 답변으로 표시했지만 그걸로 담당자가 없습니다 – Dakota

+0

@ 다코타. 다행 :). 15 인까지 upvote 할 수 없습니다. 그것을 수락하려면 질문을 올린 후 15 분을 기다려야합니다. –

0

가 아니, "오류 - 캐치 없다 ".

당신은 제로 값을 테스트하는 표현을 사용하고, 데이터 유형 변환을 무시할 수 : 를 예를 들어 :

CASE WHEN OPENDT = 0 THEN NULL ELSE CONVERT(Date, CONVERT(Varchar(8),OPENDT),104) END 

당신은 NULL을 반환 할 수 있습니다. 표현식이 '0' 또는 'Open'을 리턴하게하려면, 이는 ELSE가 리턴 한 DATE의 데이터 유형과 일치하지 않습니다. 결과 집합의 열에는 데이터 형식이 있어야하고 일부 행에는 DATE를 반환 할 수 없으며 다른 행에는 VARCHAR을 반환 할 수 없습니다.