Ответ 1
Try:
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-сервера: