在where子句中设置datefirst

时间:2017-10-26 07:14:33

标签: sql sql-server date powerbi

我正在研究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

如何在选择中将星期的第一天设置为星期一?

1 个答案:

答案 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日。

Check