Переменная NULL не получает результатов - PullRequest
0 голосов
/ 05 апреля 2020

У меня следующий запрос:

DECLARE @dt AS DATE = NULL;

SELECT orderid, shippeddate
FROM Sales.Orders
WHERE shippeddate = @dt;

У меня есть несколько заказов с NULL shippeddate, но они не возвращаются при выполнении вышеуказанного запроса.

Ответы [ 3 ]

3 голосов
/ 05 апреля 2020

Вам необходимо проверить NULL, используя IS NULL. Итак:

WHERE shippeddate = @dt OR (shippeddate IS NULL AND @dt IS NULL)
0 голосов
/ 07 апреля 2020
DECLARE @dt AS DATE = NULL;

SELECT orderid, shippeddate
FROM Sales.Orders
WHERE shippeddate = @dt  or (shippeddate IS NULL AND @dt IS NULL)
0 голосов
/ 05 апреля 2020

Если вы установите ANSI_NULLS в OFF, вы получите то, что хотите получить, но это не рекомендуется:

SET ANSI_NULLS OFF;

В этом случае предикат, который оценивается как UNKNOWN. Очевидно, что НЕ ИСТИНА - ЛОЖЬ, а НЕ ЛОЖЬ - ИСТИНА. Тем не менее, НЕ НЕИЗВЕСТНО остается НЕИЗВЕСТНЫМ. По-другому:

NULL не имеет значения и поэтому не может сравниваться с помощью операторов скалярного значения.

Вы должны использовать ISNULL().

DECLARE @dt AS DATE = NULL;

SELECT orderid, shippeddate
FROM Sales.Orders
WHERE ISNULL(shippeddate, '99991231') = ISNULL(@dt, '99991231')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...