Попробуйте:
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-сервера:
https://msdn.microsoft.com/en-GB/library/ms188048.aspx