我正在研究SQLquery,但我在使用set datefirst
时遇到了一些问题。
由于我在PowerBI的直接查询中工作,我无法将SET DATEFIRST 1
放在我的查询前面。
我需要上周1张表中的所有数据。例如: 现在是星期四,我需要上周(星期一到星期日)的所有信息。
我有这个问题:
SELECT *
FROM myDB
WHERE CreatedDateTime >= DATEADD(day, -(DATEPART(dw, GETDATE()) + 6), CONVERT(DATE, GETDATE()))
AND CreatedDateTime < DATEADD(day, 1 - DATEPART(dw, GETDATE()), CONVERT(DATE, GETDATE()))
AND Minutes is not null
AND Minutes > 0
AND TicketNumber like 'CH%'
AND User like 'itsn%'
AND TicketNumber is not null
如何在选择中将星期的第一天设置为星期一?
答案 0 :(得分:0)
您的评论中实际上有正确的代码(CASE
声明)。
要将其添加到现有代码中,只需将当前DATEPART
函数替换为CASE
语句即可。最终的查询看起来像这样。
SELECT *
FROM myDB
WHERE CreatedDateTime >= DATEADD(day, -(CASE WHEN DATEPART(DW, GETDATE()) = 1 THEN 7 ELSE DATEPART(DW, GETDATE()) - 1 END + 6), CONVERT(DATE, GETDATE()))
AND CreatedDateTime < DATEADD(day, 1 - CASE WHEN DATEPART(DW, GETDATE()) = 1 THEN 7 ELSE DATEPART(DW, GETDATE()) - 1 END, CONVERT(DATE, GETDATE()))
AND Minutes is not null
AND Minutes > 0
AND TicketNumber like 'CH%'
AND User like 'itsn%'
AND TicketNumber is not null
正如图示,这里是对查询的快速检查。当它是第22天(星期日)时,范围是第9到第16。当日期到达第23天(星期一)时,范围会上升到16日到23日。