У меня есть 3 столбца, позвоните им column A
, column B
и column C
каждый столбец - это дата.SQL - проблема с логикой WHERE
Я пытаюсь написать, где логика, как это:
Если столбец А NULL или если дата столбец C больше, чем сегодняшняя сегодня минус 3 дня
Если столбец B является NULL или если дата столбец С больше, чем сегодня сегодня минус 3 дня
Если столбец C является NULL или если дата столбец C больше, чем сегодняшняя сегодня минус 3 дня
Я придумал это, но когда я запускаю его, я недостающие элементы:
(columnA IS NULL OR columnA >= Dateadd(day, -3, Getdate()))
AND
(columnB IS NULL OR columnB >= Dateadd(day, -3, Getdate()))
AND
(columnC IS NULL OR columnC >= Dateadd(day, -3, Getdate()))
Это вызывает конфликт, для примера, у меня есть один элемент, который отсутствует, и вот почему:
дата Columna составляет менее сегодняшнего дня минус 3 дня
дата columnB меньше, то сегодняшнего дня минус 3 дней
columnC является NULL
поэтому, поскольку columnC NULL, элемент должен отображаться. Что я делаю не так?
Спасибо,
Я использую SQL Server Management Studio 2008
Это общий запрос. Они немного сложны, и производительность может быть абсолютно ужасной. Взгляните на эту статью, в которой объясняется ряд способов решения этого типа запросов. http://sqlinthewild.co.za/index.php/2009/03/19/catch-all-queries/ –
@ user979331 вы использовали условие «И», которое будет извлекать данные только в том случае, если все 3 условия выполнены, недостающие данные, которые вы упомянули, не удовлетворяют условиям 1-го 2 не отображается на выходе. Используйте условие «ИЛИ» и посмотрите, работает ли оно. –
Опубликуйте некоторые образцы данных, которые должны соответствовать вашим критериям, но это не так. – Andrew