Я рассмотрел множество подобных вопросов, заданных здесь и в других местах, и я не знаю, как экстраполировать то, что они говорят, на то, что мне нужно, поэтому я решил попросить мой сценарий.Использование операторов CASE в предложении WHERE
В принципе, мне нужно проверить, что дата строки до определенной даты. Дата (это предшествует мне, и я ничего не могу с этим поделать, несмотря на то, что она не нравится системе) хранится просто как одно число, которое соответствует числу дней в году. Например, 1 января 1, 1 февраля - 32 и т. Д. Итак, дата вычисляется путем добавления этого числа до 12/31 /. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я проверяю период, охватывающий Новый год, он возвращает (например) 29 декабря ЭТОГО года, а не LAST year. Я столкнулся с этим в SELECT, и оператор CASE работал нормально. Однако в предложении WHERE он работает не так, как ожидалось. В предложении where я должен проверить, чтобы убедиться, что это не выходные. (Опять же, код еще до меня, и я не могу изменить много, к сожалению)
Итак, теперь у меня есть это в предложении WHERE:
CASE
WHEN (dateadd(dd, t.periodid, '12/31/2013') > '01/24/2014') THEN AND (DATEPART(DW, convert(varchar, dateadd(dd, t.periodid, '12/31/2012'), 107)) NOT IN (1,7) OR t.periodid IS NULL)
WHEN (dateadd(dd, t.periodid, '12/31/2013') <= '01/24/2014') THEN AND (DATEPART(DW, convert(varchar, dateadd(dd, t.periodid, '12/31/2013'), 107)) NOT IN(1,7) OR t.periodid IS NULL)
END
(то есть: если дата больше, чем в последний день периода, добавьте число до двух лет назад и проверьте, не выходные дни. В противном случае добавьте его в 12/31 ПОСЛЕДНИЕ год и проверьте, не выходные ли они.)
Я думаю, что я понял, что это не так, потому что мой случай должен быть чем-то более похож:
AND X = CASE.....
, но я понятия не имею, что поставить X в этой ситуации.
«CASE» в T-SQL является ** выражением **, которое может возвращать одно из нескольких ** атомных значений ** - оно не может, однако, возвращать или обрабатывать кодовые блоки и не может возвращать половину предложения WHERE , –