原文:http://blog.csdn.net/htl258/article/details/4574401
--------------------------------------------
--标题:报表中常用到的日期计算方式
--作者:htl258(Tony)
--日期:-09-21 02:30
--转载请保留此信息
--------------------------------------------
DECLARE @dt DATETIME
SET @dt='2009-09-20'
--1.1 求本月的第天:
SELECT DATEADD(mm,DATEDIFF(mm,0,@dt),0) --2009-09-01 00:00:00.000
--1.2 求本月的最后天:
SELECT DATEADD(mm,DATEDIFF(mm,0,@dt)+1,0)-1 --2009-09-30 00:00:00.000
--2.1.1 求本周的第一天(周日为第一天):两种方法
SELECT DATEADD(wk,DATEDIFF(wk,0,@dt),0)-1 --2009-09-20 00:00:00.000
SELECT @dt+1-DATEPART(w,@dt+@@datefirst) --2009-09-20 00:00:00.000
--2.1.2 求本周的第一天(周一为第一天):
SELECT @dt+1-DATEPART(w,@dt+@@datefirst-1) --2009-09-14 00:00:00.000
--2.2 求本周的最后一天(在本周第一天的基础上加)
--2.3.1 求本周的第一个工作日(周日为第一天):两种方法
SELECT DATEADD(wk,DATEDIFF(wk,0,@dt),0) --2009-09-21 00:00:00.000
SELECT @dt+2-DATEPART(w,@dt+@@datefirst) --2009-09-21 00:00:00.000
SELECT DATEADD(dd,1-(DATEPART(w,@dt)+@@datefirst-1)%7,@dt) --2009-09-21 00:00:00.000
--2.3.2 求本周的第一个工作日(周一为第一天):
SELECT @dt+1-DATEPART(w,@dt+@@datefirst-1) --2009-09-14 00:00:00.000
--2.4 求本周的最后一个工作日(在第一个工作日的基础上加)
--2.5 求本月的第一个星期一:
SELECT DATEADD(wk,DATEDIFF(wk,0,DATEADD(dd,6-DATEPART(dd,@dt),@dt)),0)
--2009-09-07 00:00:00.000
--3.1 求本年的第一天:
SELECT DATEADD(yy,DATEDIFF(yy,0,@dt),0) --2009-01-01 00:00:00.000
--3.2 求本年的最后一天:
SELECT DATEADD(yy,DATEDIFF(yy,0,@dt)+1,0)-1 --2009-12-31 00:00:00.000
--4.1 求本季度的第一天:
SELECT DATEADD(qq,DATEDIFF(qq,0,@dt),0) --2009-07-01 00:00:00.000
--4.2 求本季度的最后一天:
SELECT DATEADD(qq,DATEDIFF(qq,0,@dt)+1,0)-1 --2009-09-30 00:00:00.000
--5.1 求半年度的第一天:
SELECT DATEADD(mm,DATEDIFF(mm,0,DATEADD(mm,-(MONTH(@dt)-1)%6,@dt)),0)
--2009-07-01 00:00:00.000
--5.2 求半年度的最后一天:
SELECT DATEADD(mm,DATEDIFF(mm,0,DATEADD(mm,-(MONTH(@dt)-1)%6+6,@dt)),0)-1
--2009-12-31 00:00:00.000