SQL里计算时间是经常会遇到的。
那么我们先要知道一个基本的东西
Select Cast(0 As Datetime)
------------------------------------------------------
1900-01-01 00:00:00.000
也就是说 int类型的0相当于 datetime类型的1900-01-01 00:00:00.000
下面的例子是计算当前月的第一天日期时间(当然有更简单的算法,这里是举例而已)
select DateAdd(mm, DateDiff(mm,0,getdate()), 0)
说明:1、DateDiff(mm,0,getdate())
就是计算当前日期与1900-01-01 00:00:00.000
月间隔(=1289)
2、DateAdd(mm, 1289, 0)
计算 1900-01-01 00:00:00.000增加1289个月后的日期
同样计算
当前年的第一天(元旦)
select DateAdd(yy, DateDiff(yy,0,getdate()), 0)
本季度的第一天
Select DateAdd(qq, DateDiff(qq,0,getdate()), 0)
本周的第一天(星期一)日期
select DateAdd(wk, DateDiff(wk,0,getdate()), 0)
这里我们需要知道
select datepart(wk,0) 是周一(就是说1900-01-01 00:00:00.000
是礼拜一)
就不需要设置set datefirst 1什么的了。