我正在尝试合并一对几乎相同的查询,它们根据参数化变量(管道和完成)使用略有不同的WHERE
子句。SQL Server:WHERE子句中的DATE或NULL变量
我很努力地找出最佳的方式来编码查找日期范围或NULL,具体取决于@ReportMode
变量。
在一审WHERE
条款基本上是:
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'
随着第二查询中:
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
问题:
我能创造一个
CASE
声明无线使用变量细化SELECT
声明或将它按@ApplictnDate
需要为SET
?如何在语法上创建
CASE
语句来处理NULL或日期范围?
感谢
只需使用OR和()来将where语句保留为一个单元? – Steve
只是为了挑剔:'CASE'是T-SQL中的一个**表达式**(比如'a + b') - 不是一个声明。它被评估为单一的原子价值。 –