1

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

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

我怎么能做到这一点?

我的难点主要是确定前一个星期一

当然,如果getdate()是星期一,前一个星期一是getdate()

预先感谢您的帮助。

超提交

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

4

3 回答 3

2

要获得上周一的信息,请查看 http://blog.sqlauthority.com/2007/08/20/sql-server-find-monday-of-the-current-week/

于 2012-07-24T10:00:00.393 回答
2

这应该让你开始。它将找到本周的过去星期一。

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

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

SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0)-70 as SomeMondayInHistory
于 2012-07-24T10:00:08.117 回答
2

这将检索本周的星期一

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-07-24T09:59:47.490 回答