【问题标题】:Get record from table against a specific day of current week从表中获取针对当前一周中特定日期的记录
【发布时间】:2020-03-19 19:34:40
【问题描述】:

我想知道 SQL Server 查询,在该查询中我可以从表中获取针对当前一周的特定日期(如星期一或星期二)或过去 7 天的特定日期的记录。

比如我想获取过去 7 天的第一天的记录,或者比如我想获取本周星期一或星期二的记录。

顺便说一句,我可以通过这个 SQL Server 查询获取当前星期的特定日期

      //Query
      SELECT DATEADD(DD, 0 - DATEPART(DW, GETDATE()), GETDATE())  //Get Sunday
      SELECT DATEADD(DD, 1 - DATEPART(DW, GETDATE()), GETDATE())  //Get Monday
      SELECT DATEADD(DD, 2 - DATEPART(DW, GETDATE()), GETDATE())  //Get Tuesday

但我想从表中获取这些天的记录,如下所示:

      Select * from tbl_Sale where date = "Here the specific day's date should be called"

抱歉,文字太长了,但我真的需要解释一下我需要做什么,请问有人可以这样做吗?

【问题讨论】:

标签: sql sql-server visual-studio


【解决方案1】:

仅返回 date 在过去 7 天内的那些记录,然后将您的条件进一步限制为仅星期一。

SELECT * 
FROM tbl_Sale 
WHERE DATEDIFF(DAY, GETDATE(), date) BETWEEN -7 AND 0
  AND DATENAME(WEEKDAY, date) = 'Monday'

这也可以。

SELECT * 
FROM tbl_Sale 
WHERE DATEDIFF(DAY, GETDATE(), date) BETWEEN -7 AND 0
  AND DATEPART(WEEKDAY, date) = 2 -- by default 2 is equivalent to Monday

Date and Time Data Types and Functions (Transact-SQL) 上阅读您会发现很多有价值的信息。因此,默认情况下,DATEPART(WEEKDAY, date) 将返回 1 表示任何周日,2 表示任何周一,等等。但是,您可以通过设置 DATEFIRST 将一周的第一天设置为您想要的任何一天。

这里有一些sample code,用于显示一系列日期的工作日名称和工作日编号。

【讨论】:

  • 您的回答很有价值,非常感谢。对于日期名称的 DATENAME,它工作正常,DATEPART 也工作正常,但我想知道星期一的 DATEPART 是什么?就像我写 DATEPART(WEEKDAY, dt) = 3 3 的确切日期名称是什么?
  • 当我针对我的本地表编写和测试查询时,我的答案有几个错误。我将编辑我的答案。
猜你喜欢
  • 2019-10-11
  • 2013-06-18
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多