日期推算处理总结

-- 日期推算处理总结

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, @DATE IN  ( 1 , 4 THEN   ' 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 )






 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值