我正在尝试在where子句中编写一个case语句。以下是我的查询。我想根据工作日执行查询。基本上,如果它的星期一需要被创建日期= getdate()-3,如果它的星期二需要在getdate()-3和getdate()-1之间创建一个范围,如果它的星期三至星期五,那么它需要被创建日期= getdate ()-1
SELECT Count(dispute_reference_no)AS reg_inc
FROM mytable
WHERE reasoncd IN ('b2', 'b3')
AND datecreated = (
CASE
WHEN Datename(weekday,Getdate()) = 'Monday' THEN dbo.Fn_getdateonly(Getdate()-3))
WHEN datename(weekday,getdate()) = 'tuesday' THEN (dbo.fn_getdateonly(getdate()-3)
AND dbo.fn_getdateonly(getdate()))
ELSE dbo.fn_getdateonly(getdate()-1)
END)
上面的代码不起作用。它不会让我在case语句中添加一个范围。
您不能where
像这样动态地重写子句,但是可以通过使用一系列逻辑运算符来获得所需的行为:
SELECT COUNT(Dispute_Reference_no) AS reg_inc
FROM mytable
WHERE reasoncd in ('b2', 'b3') AND
((DATENAME(weekday, GETDATE()) = 'monday' AND
datecreated = dbo.fn_getdateonly(GETDATE()-3)) OR
(DATENAME(weekday, GETDATE()) = 'tuesday' AND
datecreated BETWEEN dbo.fn_getdateonly(GETDATE()-3) AND
dbo.fn_getdateonly(GETDATE())) OR
(atecreated = dbo.fn_getdateonly(GETDATE()-1)
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句