【问题标题】:How to select results where it was inserted on X day of the week for the last X months?如何选择过去 X 个月在一周中的 X 天插入的结果?
【发布时间】:2012-11-10 05:52:45
【问题描述】:

我必须收集过去三个月的星期一插入的表中的所有行。我将如何编写 WHERE 子句日期来获得这些结果?

WHERE Date = (wk, DATEDIFF(wk,0,GETDATE()), 0)

这将选择本周星期一的所有内容,但我遇到的问题是选择三个月前的星期一范围。

谢谢!

所以这是我最终得到的 WHERE 子句,它对我很有效....

where Datestamp > dateadd(month, -3, getdate())
AND datepart(weekday, Datestamp) = datepart(weekday, DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0))

我只更改了我们输入从星期一开始的星期几的部分我添加了这个...

DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0)

【问题讨论】:

    标签: sql database sql-server-2008 date


    【解决方案1】:
    WHERE Date > dateadd(month, -3, getdate())
    AND datepart(weekday, Date) = 1
    

    这是两个独立的条件;无需将它们压缩成一个。

    注意:在您的机器上运行测试,看看您得到的 datepart(weekday, @AMondayDate) 的值。在某些系统上,星期一是 1,在其他系统上是 2;这取决于DATEFIRST configuration

    更新:

    感谢ErikE 巧妙的技巧解决了工作日数字问题:

    WHERE Date > dateadd(month, -3, getdate())
    AND datepart(weekday, Date) = datepart(weekday, '2012-11-25')
    

    【讨论】:

    • 随便datepart(weekday, DateColumn) = datepart(weekday, 'KnownMondayDate')
    猜你喜欢
    • 2015-10-19
    • 2011-03-05
    • 2015-08-02
    • 1970-01-01
    • 2013-05-07
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    • 2021-06-24
    相关资源
    最近更新 更多