2009-06-30 7 views
1

Ce problème m'a beaucoup dérangé et j'ai maintenant décidé d'essayer de trouver la bonne solution, au lieu de ma façon longue/sale/horrible à laquelle je reviens toujours (copie l'instruction SQL)SQL Server Date Vérification basée sur l'entrée

la table a une colonne de date avec une valeur par défaut de

NULL

maintenant, ce que je dois faire est de passer une valeur (-1,0,1) à une instruction SQL qui détermine quoi reculer

-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 

J'ai essayé d'utiliser des instructions CASE, mais l'opérateur logique aurait besoin de changer en fonction de la valeur transmise à la requête.

Appelons juste la table des devis et la colonne terminée, alors ...

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

solution doit être pour SQL Server 2000, et je travaille dans les procédures stockées SQL non dynamique. Donc, il doit vraiment être tout en une seule déclaration.


Merci Dan

Répondre

7

Quelque chose comme ça dans la clause WHERE

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

hahaha, je l'ai toujours fait ce problème à être plus déroutant que c'est en réalité ... Cette solution fonctionne parfaitement, merci beaucoup! :) –

0

Essayez ceci:

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) 

Raj

Questions connexes