【发布时间】:2020-10-22 04:13:27
【问题描述】:
我正在尝试为需要每天发布的定期报告提取一周至今的数据。例如:周一发出的报告需要有周一的数据,周二发出的报告会有本周周一和周二的数据等。
我知道如何提取过去 X 天的数据:
my_date > DATEADD(day, -6, GETDATE())
我如何只提取一周的日期?
【问题讨论】:
标签: sql
我正在尝试为需要每天发布的定期报告提取一周至今的数据。例如:周一发出的报告需要有周一的数据,周二发出的报告会有本周周一和周二的数据等。
我知道如何提取过去 X 天的数据:
my_date > DATEADD(day, -6, GETDATE())
我如何只提取一周的日期?
【问题讨论】:
标签: sql
在 where 条件下使用下面的 SQL 代码:
where
my_date > DATEADD(dd, -((DATEPART(WEEKDAY, mydate) + 5) % 7), DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0))
【讨论】:
正确的调整需要一些额外的模运算,因此向后调整的适当天数可以得到下面的表达式。我还假设datefirst 设置为星期日:
-((DATEPART(WEEKDAY, mydate) + 5) % 7)
如果您只是从datepart() 给出的日期数中减去两个,那么您将在周日得到一个负数,然后导致dateadd() 向前跳。您可以在此处查看日期列表和比较:
【讨论】: