2009-06-30 1 views
1

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

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

Давайте просто называть Котировки таблицы и колонки завершена, так что ...

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

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


Благодаря Dan

ответ

7

Нечто подобное в предложении WHERE

WHERE (@param = -1) 
OR (@param = 0 AND completed IS NULL) 
OR (@param = 1 AND completed IS NOT NULL) 
+0

хахаха, я постоянно сделал эту проблему в быть более запутанным, что это на самом деле ... Это решение работает отлично, большое вам спасибо! :) –

0

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

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) 

Радж