COSE 문의 NULL DATE를 확인하십시오.
-
20-09-2019 - |
문제
내 소스 테이블은 다음과 같습니다
Id StartDate
1 (null)
2 12/12/2009
3 10/10/2009
위의 내용을 선택하는 SELECT 문을 만들고 싶지만 날짜가 다음과 같이 NULL이 아닌 경우 Varchar를 표시하는 추가 열이 있습니다.
Id StartDate StartDateStatus
1 (null) Awaiting
2 12/12/2009 Approved
3 10/10/2009 Approved
나는 선택에 다음과 같은 것을 가지고 있지만 작동하지 않는 것 같습니다. 모든 상태가 설정됩니다 Approved
날짜에 약간의 널이 있습니다
select
id,
StartDate,
CASE StartDate
WHEN null THEN 'Awaiting'
ELSE 'Approved' END AS StartDateStatus
FROM myTable
내 쿼리 결과는 다음과 같습니다.
Id StartDate StartDateStatus
1 (null) Approved
2 12/12/2009 Approved
3 10/10/2009 Approved
4 (null) Approved
5 (null) Approved
StartDate는 a입니다 smalldatetime
, 이것이 어떻게 처리되어야하는지에 대한 예외가 있습니까?
감사
해결책
노력하다:
select
id,
StartDate,
CASE WHEN StartDate IS NULL
THEN 'Awaiting'
ELSE 'Approved' END AS StartDateStatus
FROM myTable
당신은 startDate = null 일 때 코드를 수행했을 것입니다.
NULL
결코 같지 않습니다 NULL
(NULL은 값이 없기 때문에). NULL
또한 결코 같지 않습니다 NULL
. 위에서 언급 한 구문은 ANSI SQL 표준이며 대화는 다음과 같습니다. StartDate IS NOT NULL
.
다음을 실행할 수 있습니다.
SELECT CASE WHEN (NULL = NULL) THEN 1 ELSE 0 END AS EqualityCheck,
CASE WHEN (NULL <> NULL) THEN 1 ELSE 0 END AS InEqualityCheck,
CASE WHEN (NULL IS NULL) THEN 1 ELSE 0 END AS NullComparison
그리고 이것은 반환됩니다 :
EqualityCheck = 0
InEqualityCheck = 0
NullComparison = 1
완전성을 위해 SQL Server에서는 다음을 수행 할 수 있습니다.
SET ANSI_NULLS OFF;
이는 동등한 비교가 다르게 작동하게됩니다.
SET ANSI_NULLS OFF
SELECT CASE WHEN (NULL = NULL) THEN 1 ELSE 0 END AS EqualityCheck,
CASE WHEN (NULL <> NULL) THEN 1 ELSE 0 END AS InEqualityCheck,
CASE WHEN (NULL IS NULL) THEN 1 ELSE 0 END AS NullComparison
반환 :
EqualityCheck = 1
InEqualityCheck = 0
NullComparison = 1
그러나 나는 이것을하는 것을 강력히 추천합니다. 이후 코드를 유지하는 사람들은 당신을 사냥하고 당신을 다치게해야 할 수도 있습니다.
또한 다가오는 버전의 SQL Server에서 더 이상 작동하지 않습니다.
다른 팁
select Id, StartDate,
Case IsNull (StartDate , '01/01/1800')
When '01/01/1800' then
'Awaiting'
Else
'Approved'
END AS StartDateStatus
From MyTable
제휴하지 않습니다 StackOverflow