【问题标题】:How to pull week to date data in SQL Server?如何在 SQL Server 中提取周到日期数据?
【发布时间】:2020-10-22 04:13:27
【问题描述】:

我正在尝试为需要每天发布的定期报告提取一周至今的数据。例如:周一发出的报告需要有周一的数据,周二发出的报告会有本周周一和周二的数据等。

我知道如何提取过去 X 天的数据:

my_date > DATEADD(day, -6, GETDATE())

我如何只提取一周的日期?

【问题讨论】:

    标签: sql


    【解决方案1】:

    在 where 条件下使用下面的 SQL 代码:

    where
    my_date > DATEADD(dd, -((DATEPART(WEEKDAY, mydate) + 5) % 7), DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0))
    

    【讨论】:

    • 谢谢!当我使用它时,它不会返回任何东西。你能解释一下这是做什么的吗?非常感谢您的回复
    • 解释如下: 第一个参数:dd 表示日期部分.. 第二个参数:-(DATEPART(WEEKDAY, GETDATE())-2) 返回星期几,-2 因为在sql 周从星期日开始(-2 将设置为星期一)和 -ve 全部因为我们需要减去它。第三个参数:DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0),返回当前日期,时间值设置为 00.00.00。要验证试试这个:SELECT DATEADD(dd, -(DATEPART(WEEKDAY, GETDATE())-2), DATEADD(dd, DATEDIFF(dd, 0, GETDATE()), 0))
    • @curiosav,我认为您没有得到任何记录,因为自星期一以来您没有本周的任何数据,或者 my_date 字段不是 sql DATE 格式。
    • 我确实有这周的数据。如果我使用 - SET DATEFIRST 1;然后:其中 my_date >= dateadd(day, 1-datepart(dw, getdate()), CONVERT(date,getdate())) AND my_date
    • 感谢您的帮助。您的查询完全有意义,我只是无法弄清楚为什么它不返回记录。我上面写的查询有效并返回本周的数据。我认为这应该符合我的目的......
    【解决方案2】:

    正确的调整需要一些额外的模运算,因此向后调整的适当天数可以得到下面的表达式。我还假设datefirst 设置为星期日:

    -((DATEPART(WEEKDAY, mydate) + 5) % 7)
    

    如果您只是从datepart() 给出的日期数中减去两个,那么您将在周日得到一个负数,然后导致dateadd() 向前跳。您可以在此处查看日期列表和比较:

    https://rextester.com/IUY88999

    【讨论】:

    • 非常注意!我已根据您的建议更新了回复。
    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 2014-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多