我有这个查询,它正在从SQL Server数据库中提取所有在前一个工作日关闭的事件。它非常整洁,因为它使用modulo独立于@@ DATEFIRST本地设置。但是我需要修改它,在周一它给我所有事件在星期五和星期日之间关闭。
当前代码:
SELECT
inc.Incident_Id, inc.Close_Time
FROM
inc
WHERE
CONVERT (CHAR(10), inc.Close_Time, 126) = CONVERT (CHAR(10), (DATEADD(DAY, CASE (DATEPART(WEEKDAY, GETDATE()) + @@DATEFIRST) % 7
WHEN 1 THEN -2
WHEN 2 THEN -3
ELSE -1
END, DATEDIFF(DAY, 0, GETDATE()))),126)
我在第一次CONVERT之前尝试使用另一个CASE DATEPART(WEEKDAY, GETDATE())
,但它看起来不像> =和< =(或BETWEEN& AND)在这之后的一个条件下都不允许。
总结一下,它应该是这样的:
答案 0 :(得分:0)
试试这个:
DECLARE @from date =
DATEADD(day,
CASE datediff(d, 0, getdate()) %7
WHEN 0 THEN -3
WHEN 6 THEN -2
ELSE -1
END, getdate())
SELECT inc.Incident_Id, inc.Close_Time
FROM inc
WHERE
inc.Close_Time >= @from
AND inc.Close_Time < @to
周一和周日将在周五和之后返回
星期二到星期六将在前一天返回。