Проверка даты SQL Server на основе ввода

Эта проблема беспокоила меня так много раз, и теперь я решил попытаться найти для нее правильное решение вместо моего многословного/грязного/ужасного способа, к которому я всегда возвращаюсь (копируя оператор sql)

В таблице есть столбец даты со значением по умолчанию NULL.

Теперь мне нужно передать значение (-1,0,1) оператору sql, который определяет, что нужно вернуть.

-1 - should bring back all rows
0  - should bring back rows with a NULL date value
1  - should bring back rows with a valid date value

Я пытался использовать операторы CASE, но логический оператор должен был измениться в зависимости от значения, передаваемого в запрос.

Давайте просто назовем таблицу Quotes, и столбец будет завершен, так что...

CREATE TABLE 'Quotes'
(
    completed DATETIME default(NULL)
)

Решение должно быть для SQL Server 2000, и я работаю в хранимых процедурах, а не в динамическом SQL. Так что это действительно должно быть все в одном заявлении.


Спасибо Дэн


person dan richardson    schedule 30.06.2009    source источник


Ответы (2)


Что-то вроде этого в предложении WHERE

WHERE (@param = -1)
OR (@param = 0 AND completed IS NULL)
OR (@param = 1 AND completed IS NOT NULL)
person Joel Goodwin    schedule 30.06.2009
comment
хахаха, я постоянно делал эту проблему более запутанной, чем она есть на самом деле... Это решение отлично работает, большое спасибо! :) - person dan richardson; 30.06.2009

Попробуй это:

declare @param int
set @param=-1
declare @sql varchar(2000)
set @sql='select * from quotes '+ 
case @param when 0 then 'where completed is null'
            when 1 then 'where completed is not null'
            when -1 then ''
end
exec(@sql)

Радж

person Raj    schedule 30.06.2009