Je suis en train de tenter d'amalgamer une paire de requêtes presque identiques, qui utilisent des clauses WHERE
légèrement différentes en fonction des variables paramétrées (Pipeline et Completions).SQL Server: DATE ou NULL Variable dans la clause WHERE
J'ai du mal à trouver la meilleure façon de le coder pour chercher une plage de dates ou une valeur NULL en fonction de la variable @ReportMode
.
La clause WHERE
en première instance est essentiellement:
DECLARE @ReportMode VARCHAR(20),
@ApplictnDate DATETIME;
SET @ApplictnDate =
CASE
WHEN @ReportMode = 'Completions' THEN '20160801 00:00:00'
WHEN @ReportMode = 'Pipeline' THEN '20170201 00:00:00'
END
SELECT
Id, AppDate, CompDate
FROM
TbTable
WHERE
AppDate > @ApplictnDate AND
CompDate BETWEEN '20170701 00:00:00' AND '20170731 00:00:00'
Avec la seconde étant de requête:
DECLARE @ReportMode VARCHAR(20),
@ApplictnDate DATETIME;
SET @ApplictnDate =
CASE
WHEN @ReportMode = 'Completions' THEN '20160801 00:00:00'
WHEN @ReportMode = 'Pipeline' THEN '20170201 00:00:00'
END
SELECT
Id, AppDate, CompDate
FROM
TbTable
WHERE
AppDate > @ApplictnDate AND
CompDate IS NULL
Questions:
Puis-je créer un
CASE
déclaration wi affiner l'instructionSELECT
en utilisant la variable ou devra-t-elle êtreSET
selon@ApplictnDate
? Comment créer l'instructionCASE
de manière syntaxique pour traiter une plage de dates NULL ou une plage de dates?
Merci
Utilisez simplement un OR et() pour conserver les instructions where comme une seule unité? – Steve
Juste pour être nitpicky: 'CASE' est une ** expression ** (comme' a + b') dans T-SQL - pas une déclaration. C'est quelque chose qui est évalué à une seule valeur atomique. –