我正在嘗試合併一對幾乎相同的查詢,它們根據參數化變量(管道和完成)使用略有不同的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') - 不是一個聲明。它被評估爲單一的原子價值。 –