Я пытаюсь создать оператор выбора T-SQL для фильтрации запроса на основе того, является ли поле NULL
или если это содержит значение. Это было бы просто, если Вы могли бы присвоиться NULL
или NOT NULL
как результат случая, но это не кажется возможным.
Вот 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
условие может быть достигнуто, не обеспечив a WHEN
условие вообще (для возврата a NULL
значение).
WHEN 1
условие кажется, что могло использовать подстановочный символ, но я получаю ошибку относительно преобразования типов. Присвоение столбца к себе фиксирует это.
Я понятия не имею, что сделать для WHEN NULL
состояние. Моя внутренняя логика, кажется, думает, присваивая столбец себе, должен решить это, но это не делает как указано выше.
Я воссоздал этот использующий динамический SQL, но по различным причинам я предпочел бы создавать его в собственном коде.
Я ценил бы любой вход.Спасибо.
Выражение CASE (как сказал OMG Ponies) смешивает и сопоставляет типы данных (как вы заметили), кроме того, вы не можете сравнивать с NULL, используя =
или WHEN.
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
для разделения трех случаев