我正在尝试在where子句中为我正在处理的查询编写一个case语句。我正在将代码导入Crystal报表中,我基本上是想说变量'type'是否设置为'create'在where子句中在该日期范围内运行,否则在其他日期范围内运行。它一直给我一个错误。我似乎无法在此处确定我的语法出了什么问题。帮助任何人吗?
DECLARE @Date1 DATETIME
DECLARE @Date2 DATETIME
DECLARE @type VARCHAR(20)
SET @Date1 = '2010-1-1'
SET @Date2 = '2010-2-1'
SET @type = '{?DateType}'
select *
from filled
WHERE
(CASE WHEN @type = 'create' THEN
filled.CREATEDON >= @Date1
AND filled.CREATEDON < DATEADD(d, +1, @Date2)
WHEN @type <> 'create' THEN
filled.datefilled >= @Date1
AND filled.datefilled < DATEADD(d, +1, @Date2)
END)
最佳答案
您不需要case
语句
WHERE ( (@type = 'create' and filled.CREATEDON >= @Date1 AND filled.CREATEDON < DATEADD(d, +1, @Date2) ) or
(@type <> 'create' and filled.datefilled >= @Date1 AND filled.datefilled < DATEADD(d, +1, @Date2) )
)
这将使您在
case
语句中具有荒谬的逻辑。这两个条件的@type
值相同。我认为这是一个错字。