SqlServer得到生日(闰月考虑)

 

 

 

/*

 * Sql得到生日(闰月考虑)

 * @birthday 时间

 * @flag 1:返回228日,0:返回31

 * 调用:Select dbo.GetBirthday(birthday,0) From ofUser ou Where userId='48e541e2-7883-416a-b4ee-d78ddde4d6b8'

 */

Create Function GetBirthday

(

@birthday     Datetime,

@flag         Int

)

Returns Datetime

As

 

Begin

Declare @BirthdayRet      Datetime,

        @BirthdayThis     Datetime,

        @BirthdayNext     Datetime,

        @today            Datetime,

        @dateBetween      Int

 

Set @today = Convert(Datetime, Convert(Varchar(10), Getdate(), 120)) 

Set @dateBetween = Datediff(YY, @birthday, Getdate()) 

Set @BirthdayThis = Dateadd(YY, @DateBetween, @birthday)     

Set @BirthdayNext = Dateadd(YY, @DateBetween + 1, @birthday) 

If @flag = 1 --2 月29 日的生日计算为2 月28 日

Begin

    If @today > @BirthdayThis

        Set @BirthdayRet = @BirthdayNext

    Else

        Set @BirthdayRet = @BirthdayThis

End

Else

    --2 月29 日的生日计算为3 月1 日

Begin

    If @today > @BirthdayThis

        If Day(@birthday) = 29

           And Day(@BirthdayNext) = 28

            Set @BirthdayRet = @BirthdayNext + 1

        Else

            Set @BirthdayRet = @BirthdayNext

    Else 

    If Day(@birthday) = 29

       And Day(@BirthdayThis) = 28

        Set @BirthdayRet = @BirthdayThis + 1

    Else

        Set @BirthdayRet = @BirthdayThis

End

Return @BirthdayRet

End 

 

 

Go

 

 

 

 
 
资料:
http://blog.youkuaiyun.com/smartsmile2012/article/details/8166225
http://www.efficient-it.com.cn/space/78/viewspace/itemid/4464.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值