2010-06-30 4 views
1

필드가 NULL인지 여부에 따라 쿼리를 필터링하는 T-SQL case 문을 만들거나 값이 포함되어있는 경우이를 시도하고 있습니다. 경우의 결과로 NULL 또는 NOT NULL을 할당 할 수는 있지만 가능하지는 않은지는 간단합니다.CASE 문에서 BATE와 DATETIME을 일치시키는 중

가 여기에 psuedocode입니다 : 나의 이해에서

WHERE DateColumn = CASE @BitInput 
    WHEN 0 THEN (all null dates) 
    WHEN 1 THEN (any non-null date) 
    WHEN NULL THEN (return all rows) 

에서, WHEN 0 조건 모두에서 WHEN 조건을 제공하지 않음으로써 달성 될 수있다 (A NULL 값을 반환합니다).

와일드 카드 문자를 사용할 수있는 것처럼 보이지만 형식 변환과 관련하여 오류가 발생합니다. 자체에 열을 지정하면이 문제가 해결됩니다.

WHEN NULL 상태로 무엇을해야할지 모르겠습니다. 내 내부 논리는 열 자체를 할당하면이 문제를 해결해야한다고 생각하는 것 같지만 위에서 언급 한 것처럼하지는 않습니다.

동적 SQL을 사용하여이 작업을 다시 만들었지 만 여러 가지 이유로 원시 코드로 작성하는 것을 선호합니다.

나는 모든 의견을 고맙게 생각하고 있습니다. 감사.

답변

2

케이스 표현 (OMG Ponies가 말했듯이)은 데이터 유형을 혼합하여 (사용자가 발견 한 것처럼) 일치시키고 = 또는 WHEN을 사용하여 NULL과 비교할 수 없습니다.

WHERE 
    (@BitInput = 0 AND DateColumn IS NULL) 
    OR 
    (@BitInput = 1 AND DateColumn IS NOT NULL) 
    OR 
    @BitInput IS NULL 

아마도 CASE를 사용하여 작성할 수 있지만 원하는 것은 OR입니다.

또한 IF..ELSE 또는 UNION ALL

+0

당신의 선생님이 신사와 일에 대한 내 개인적인 영웅을 언급하지 않기 학자있는 3 개의 사례를 구분하는 데 사용할 수 있습니다. 빠른 답변 감사합니다. – beardog

관련 문제