Соответствие BIT к ДАТЕ И ВРЕМЕНИ В СЛУЧАЕ, ЕСЛИ оператор

Я пытаюсь создать оператор выбора 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, но по различным причинам я предпочел бы создавать его в собственном коде.

Я ценил бы любой вход.Спасибо.

1
задан beardog 30 June 2010 в 17:27
поделиться

1 ответ

Выражение 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 для разделения трех случаев

2
ответ дан 2 September 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: