t-sql меняет '=' на '> или <' в регистре - PullRequest
2 голосов
/ 25 февраля 2011

Это часть большого запроса.

Что я пытаюсь сделать, если переменная @exemptionStartDate = '1900-01-01', то просто выбрать все,

т. ce.ExemptionStartDate = ce.ExemptionStartDate.

В противном случае, я хочу только строки, где ce.ExemptionStartDate > @exemptionStartDate

ce.ExemptionStartDate имеет значение DateTime

SELECT foobar 
WHERE foo = bar
AND ce.ExemptionStartDate = CASE WHEN @exemptionStartDate = '1900-01-01' THEN ce.ExemptionStartDate ELSE (> @exemptionStartDate) END

это возможно? Или мне придется сделать хакерскую вещь, чтобы сделать все длинной строкой и просто добавить ее по мере необходимости?

Я получаю синтаксическую ошибку и не знаю, как создать такую ​​вещь.

Ответы [ 4 ]

3 голосов
/ 25 февраля 2011

не нужно усложнять дело

if @exemptionStartDate = '1900-01-01'
set @exemptionStartDate = '1753-01-01' --lowest date for datetime

и тогда это просто

where ce.ExemptionStartDate > @exemptionStartDate
2 голосов
/ 25 февраля 2011

Можно ли предположить, что все значения ExemptionStartDate в таблице больше, чем 1900-01-01?

Если это так, вы можете упростить до:

...
WHERE foo = bar
AND ce.ExemptionStartDate > @exemptionStartDate
2 голосов
/ 25 февраля 2011

Вам необходимо включить столбец в случаях : Обновление Этот запрос будет работать:

AND (@exemptionStartDate = '1900-01-01'
     OR ce.ExemptionStartDate > @exemptionStartDate) 

См. Ответ Cyberwiki о том, как использовать CASE

1 голос
/ 25 февраля 2011

Ваш запрос должен быть действительно

SELECT foobar 
WHERE foo = bar
AND (@exemptionStartDate = 0 OR ce.ExemptionStartDate > @exemptionStartDate)

Если вы действительно хотите оператор CASE, вот логический трюк

SELECT foobar 
WHERE foo = bar
AND ce.ExemptionStartDate >
    CASE
    WHEN @exemptionStartDate = 0 THEN ce.ExemptionStartDate-1
    ELSE ce.ExemptionStartDate
    END

Это выглядит аккуратно, но это не принесет пользы вашим запросам с индексами. Придерживайтесь верхней. Разница между первым и вторым состоит в том, что второе НЕ покажет никаких записей null ce.ExemptionStartDate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...