原文: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


本文转载:CSDN博客