MSSql中,这句查询本月的第一个星期一是怎么运行的,原理是什么?
selectDATEADD(wk,DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())),0)...
select DATEADD(wk, DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate())), 0)
展开
展开全部
从这句开始理解:
1、select datename(dw,'1900-01-01')
结果是:星期一
2、select datepart(day,getdate())
取得当前的日期数
3、select 6-datepart(day,getdate())
保证日期数不超过1个月,6可以是1-1都可以
4、select dateadd(dd,6-datepart(day,getdate()),getdate())
取得本月第1周的一个日期
5、select DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate()))
取得从0周【取得本月第1周的一个日期】的周数 (5月是5809)
6、select DATEADD(wk, 5809, 0)
这样就得到本月的第一周周1,最后一个参数是星期0,原因是 1900-01-01也是星期1,如果你要周二就改成1,以此类推。
1、select datename(dw,'1900-01-01')
结果是:星期一
2、select datepart(day,getdate())
取得当前的日期数
3、select 6-datepart(day,getdate())
保证日期数不超过1个月,6可以是1-1都可以
4、select dateadd(dd,6-datepart(day,getdate()),getdate())
取得本月第1周的一个日期
5、select DATEDIFF(wk,0,dateadd(dd,6-datepart(day,getdate()),getdate()))
取得从0周【取得本月第1周的一个日期】的周数 (5月是5809)
6、select DATEADD(wk, 5809, 0)
这样就得到本月的第一周周1,最后一个参数是星期0,原因是 1900-01-01也是星期1,如果你要周二就改成1,以此类推。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询