【问题标题】:SQL Server 2005: arithmetic with datesSQL Server 2005:日期算术
【发布时间】:2012-07-22 14:58:45
【问题描述】:

我想在 SQL Server 2005 中编写一个简单的 SELECT 语句,它使用日期算法进行以下计算:

从当前日期(即getdate())开始,确定上一个星期一,然后从该星期一减去 70 天,在输出中显示结果日期。

我怎样才能做到这一点?

我的困难主要是确定上周一

当然,如果getdate()是星期一,那么上一个星期一就是getdate()

提前感谢您的热心帮助。

UltraCommit

编辑:请注意,在意大利,一周的第一天是星期一而不是星期日,因此如果输入是 2012 年 7 月 29 日星期日,则输出必须是 7 月 23 日,而不是 7 月 30 日。

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    这将检索本周的星期一

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

    然后你需要从上面的天数中减去 70

    SELECT Dateadd(DAY,-70,DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0))
    

    编辑:请仔细阅读SO中发布的答案

    星期一显示为当前周,因为DATEFIRST 表示一周的第一天设置为星期一。要设置为星期日,您需要将设置更改为星期日

     Set DATEFIRST 7
    

    如上述 SO 链接中的建议,您需要更改您的代码

     DECLARE @dt DATE = '1905-01-01';
     SELECT [start_of_week] = DATEADD(WEEK, DATEDIFF(WEEK, @dt, CURRENT_TIMESTAMP), @dt);
    

    【讨论】:

    • 编辑:请注意,在意大利,一周的第一天是星期一而不是星期日,所以如果输入是星期日,2012 年 7 月 29 日,输出必须是 7 月 23 日,而不是 30 日七月。
    • 写:SELECT DATEADD(wk, DATEDIFF(wk,0,(GETDATE())-1), 0) 还不够吗?我在 GETDATE 中减去了 1,所以它在意大利有效,使用 SUNDAY 作为一周的第一天,我意识到只有一个转变。
    • 是的,这肯定会工作,但我已经编辑了代码,以便您应该意识到问题。如果一周的第一天更改为其他日期,您不应该结束对上述函数进行加减值
    • 非常感谢您的热心贡献!
    【解决方案2】:
    【解决方案3】:

    这应该可以帮助您入门。它将查找当前一周的过去星期一。

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

    要减去 70 天,只需在末尾加上 -70:

    SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0)-70 as SomeMondayInHistory
    

    【讨论】:

    • 编辑:请注意,在意大利,一周的第一天是星期一而不是星期日,所以如果输入是星期日,2012 年 7 月 29 日,输出必须是 7 月 23 日,而不是 30 日七月。
    猜你喜欢
    • 1970-01-01
    • 2014-08-29
    • 2010-11-12
    • 1970-01-01
    • 2011-11-17
    • 2011-09-06
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多