Sql Server 指定日期所在周的第一天和最后一天

Declare @i Int = 0 ;
While @i < 7
	Begin
		Set @i += 1 ;

		Set DateFirst @i ;

		Declare @dt DateTime = '2019-01-01 00:00:00' ;

		Select --用来确定一周中第一天是星期几  所有的日期函数中,只有 DATEPART 函数受 DATEFIRST 的影响,其它函数都不受其影响。
			@@DateFirst										As [@@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 ;

原文

https://blog.csdn.net/iteye_2060/article/details/81799973#commentBox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值