日期推算处理总结

来源:互联网 发布:superworks软件收费么 编辑:程序博客网 时间:2024/04/28 17:49
--日期推算处理总结

DECLARE @DATE DATETIME-- 日期参数
SET @DATE = '2007-03-26'


--1:年
--
指定日期所在该年的第一天
SELECT YearFirstDay=CONVERT(CHAR(5),@DATE,120)+'1-1'
--指定日期所在该年的最后一天
SELECT YearLastDay=CONVERT(CHAR(5),@DATE,120)+'12-31'

--2:季度
--
指定日期所在该季度的第一天〔当前月份减(0或1或2)即所要季度的第一个月,然后再加日(1)〕
SELECT QuarterFirstDay=CONVERT(DATETIME,
    
CONVERT(CHAR(8),
        
DATEADD(MONTH,
        
DATEPART(QUARTER,@DATE)*3-MONTH(@DATE)-2
        ,
@DATE)
    ,
120)
+'1')
--指定日期所在该季度的最后一天〔当前月份加(0或1或2)即所要季度的最后一个月,然后再加日(31或30)〕
--
(CASE判断法)
SELECT QuarterLastDay=CONVERT(DATETIME,
    
CONVERT(CHAR(8),
        
DATEADD(MONTH,
            
DATEPART(QUARTER,@DATE)*3-MONTH(@DATE)
        ,
@DATE)
    ,
120)
+CASE WHEN DATEPART(QUARTER,@DATEIN (1,4THEN '31' ELSE '30' END)
--直接推算法〔下一个季度的第一个月的第一天减日(1)〕
SELECT QuarterLastDay=DATEADD(DAY,-1,
    
CONVERT(CHAR(8),
        
DATEADD(MONTH,
            
1+DATEPART(QUARTER,@DATE)*3-MONTH(@DATE)
        ,
@DATE)
    ,
120)
+'1')

--3:月
--
指定日期所在月份的第一天
SELECT MonthFirstDay=CONVERT(DATETIME,CONVERT(CHAR(8),@DATE,120)+'1')
--指定日期所在月份的最后一天〔下个月的第一天减日(1)〕
SELECT MonthLastDay=DATEADD(DAY,-1,CONVERT(CHAR(8),DATEADD(MONTH,1,@DATE),120)+'1')

--4:周
--
指定日期所在周的任意一天
DECLARE @Number INT --周的第几天
SET @Number = 6
SELECT WeekAnyDay=DATEADD(DAY,@Number-DATEPART(WEEKDAY,@DATE),@DATE)

--5:星期
--
指定日期所在周的任意星期几
DECLARE @NUM INT--星期几
SET @NUM = 4
SELECT WeekDay=DATEADD(DAY,
@NUM-(DATEPART(WEEKDAY,@DATE)+@@DATEFIRST-1)%7,@DATE)