【问题标题】:Set datefirst in where clause在 where 子句中设置 datefirst
【发布时间】:2023-03-11 19:50:01
【问题描述】:

我正在处理 SQL 查询,但 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

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

【问题讨论】:

  • 我在 Stack 上找到了这个代码部分:声明 @MyDate datetime = getdate() select CASE WHEN DATEPART(DW,@MyDate) = 1 THEN 7 WHEN DATEPART(DW,@MyDate)
  • 看起来更像 SQL Server 而不是 MySQL。请正确标记。

标签: sql sql-server date powerbi


【解决方案1】:

实际上,您的评论中有正确的代码(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 日。

【讨论】:

  • 哇@joe,你太棒了。这很完美。非常感谢
猜你喜欢
  • 2012-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多