SQL Server 2005:带日期的算术

时间:2012-07-24 09:54:34

标签: sql-server

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

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

我怎么能实现这个目标?

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

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

提前感谢您的帮助。

UltraCommit

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

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

答案 2 :(得分:2)

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

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

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

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