首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T-sql星期一日期前

T-sql星期一日期前
EN

Stack Overflow用户
提问于 2009-06-18 13:01:48
回答 5查看 7K关注 0票数 7

我在一所大学工作,我们的学生管理系统的开学日期是由8月1日或之前的星期一决定的。我需要在我的查询中匹配这一点,有没有一种方法可以轻松地在这个日期或之前获得星期一的日期。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-18 13:11:20

代码语言:javascript
复制
set datefirst 1; -- Make Monday the first day of the week

select dateadd(dd, -1*(datepart(dw, '2009-08-01')-1), '2009-08-01')

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

票数 3
EN

Stack Overflow用户

发布于 2011-05-20 05:49:00

被接受的答案对我不起作用,因为我需要在同一查询中同时使用周日周和周一周。这适用于不同的“日期优先”设置:

代码语言:javascript
复制
SELECT DATEADD(d, -((DATEPART(WEEKDAY, '20110515') - DATEPART(dw, '19000101') + 7) % 7), '20110515')

"DATEPART(dw,'19000101')“将确定您的"datefirst”设置,因为1900-01-01是在星期一。如果您想要以周二为基础的一周,您可以将19000101更改为19000102。

顺便说一句,'20110515‘是唯一适用于所有SQL Server区域性设置的日期格式。像“2011-05-06”这样的日期在某些国家会被误解。(归功于Itzik Ben-Gan指出这一点)

票数 7
EN

Stack Overflow用户

发布于 2009-06-18 13:07:30

您可以使用datepart来获取工作日,然后进行一些计算以返回到您的星期一。此示例使用的是美国默认值datefirst 7(其中星期一是一周的第二天)。将要添加的天数调整为适用于您的区域设置的一周中的哪一天。

代码语言:javascript
复制
select dateadd(dd, -datepart(dw, '2009-08-01') + 2, '2009-08-01')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1012516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档