T-sql星期一之前的日期

Pet*_*teT 7 t-sql

我在大学工作,我们的学生管理系统学年开始日期是在8月1日或之前的星期一确定的.我需要在我的查询中匹配这个,有没有办法轻松获取星期一或在此日期之前的日期.

Cla*_*art 6

接受的答案对我不起作用,因为我在同一个查询中需要一个星期日周和周一周.这适用于不同的"datefirst"设置:

SELECT DATEADD(d, -((DATEPART(WEEKDAY, '20110515') - DATEPART(dw, '19000101') + 7) % 7), '20110515')
Run Code Online (Sandbox Code Playgroud)

"DATEPART(dw,'19000101')"将确定自1900-01-01周一以来的"datefirst"设置.如果您想要以星期二为基础的一周,则可以将19000101更改为19000102.

BTW,'20110515'是唯一适用于所有SQL Server文化设置的日期格式."2011-05-06"等日期在某些国家/地区会被误解.(感谢Itzik Ben-Gan指出这一点)


小智 3

set datefirst 1; -- Make Monday the first day of the week

select dateadd(dd, -1*(datepart(dw, '2009-08-01')-1), '2009-08-01')
Run Code Online (Sandbox Code Playgroud)

返回 2009 年 7 月 27 日,即 8 月 1 日及之前的星期一。如果 8 月 1 日是星期一,则将其更改为 2005 年,查询将返回 08-01