我想在SQL Server 2005中编写一个简单的SELECT
语句,它使用日期算法进行以下计算:
从当前日期开始(这意味着getdate()
),确定上周一,然后从该周一减去70天,在输出中显示结果日期。
我怎么能实现这个目标?
我的困难主要是确定上周一。
当然,如果getdate()
是星期一,则上一个星期一是getdate()
提前感谢您的帮助。
UltraCommit
编辑:请注意,在意大利,一周的第一天是星期一而不是星期日,所以如果输入的是2012年7月29日星期日,则输出必须是7月23日,而不是7月30日。
答案 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