Declare @i Int = 0 ;While @i < 7BeginSet @i += 1 ;Set DateFirst @i ;Declare @dt DateTime = '-01-01 00:00:00' ;Select --用来确定一周中第一天是星期几 所有的日期函数中,只有 DATEPART 函数受 DATEFIRST 的影响,其它函数都不受其影响。@@DateFirstAs [@@DateFirst] ,--DATEPART(WEEKDAY, @DT) 返回指定日期是一周中的第几天,注意是相对于 DATEFIRST 为一周中第一天,这和是星期几不是一个概念。--这也就是说,随着 DATEFIRST 设置不同,同一日期的上述返回值也不同。DatePart( Weekday, @dt )As 以当前设置 ,--为了抵消这种影响,我们可以将 @@DATEFIRST 添加到 @DT 上,此时调用 DATEPART 与把 DATEFIRST 设为 7 的结果是一致的。--DatePart( Weekday, @dt+@@DateFirst ) 以周日开始,--如果你想把 DATEFIRST 逻辑 地设置为 n ,从日期减去常数 n 即可:DatePart( Weekday, @dt + @@DateFirst - 1 )As 以周一开始 ,DatePart( Weekday, @dt + @@DateFirst - 2 )As 以周二开始 ,DatePart( Weekday, @dt + @@DateFirst - 3 )As 以周三开始 ,DatePart( Weekday, @dt + @@DateFirst - 4 )As 以周四开始 ,DatePart( Weekday, @dt + @@DateFirst - 5 )As 以周五开始 ,DatePart( Weekday, @dt + @@DateFirst - 6 )As 以周六开始 ,DatePart( Weekday, @dt + @@DateFirst - 7 )As 以周日开始 ,--以星期天开始 ,获取指定日期所在周的第一天DatePart( Weekday, @dt + @@DateFirst - 7 ) - 1 As 需要往前几天 , --当前是本周第3天.只能往前退2天.退3天就是再上一周了DateAdd( Day, 1 - DatePart( Weekday, @dt + @@DateFirst - 7 ), @dt ) 所在周的第一天,--以星期天开始 ,获取指定日期所在周的最后一天7 - DatePart( Weekday, @dt + @@DateFirst - 7 ) As 需要往后几天 , --当前是本周第3天.往后7-3=4天DateAdd( Day, 7 - DatePart( Weekday, @dt + @@DateFirst - 7 ), @dt ) 所在周的最后一天;End ;
原文
/iteye_2060/article/details/81799973#commentBox
如果觉得《Sql Server 指定日期所在周的第一天和最后一天》对你有帮助,请点赞、收藏,并留下你的观点哦!