SqlServer中计算实际年龄的方法

Excel中有个计算日期差的函数datedif,SqlServer中也有一个类似函数datediff,但是两个函数的计算逻辑是不一致的:

Excel中的datedif函数,计算精度到日,不足日的月份差额要减一,不足月的年份差额要减一,例如

DATEDIF("1976-09-29","2022-09-28","y") = 45

但是在SqlServer中,计算年份日期差是直接按照年份数值相减,而不会考虑是否足月;计算月份差也是直接年份加月份相减,也不会考虑日期是否不足,所以上面两个日期在SqlServer中计算结果会不一样

SELECT DATEDIFF(yy,'1976-09-29', '2022-09-28') = 46

项目中有个需求需要计算人员实际年龄,如果在Excel中计算就非常容易,直接用DATEDIF函数就能算出人员实际年龄,但是如果在SqlServer中,就稍微麻烦点了,直接使用DATEDIFF函数算出来的实际年龄是虚岁,所以要改一下sql的计算,修改如下:

SELECT
    CASE WHEN MONTH(getdate())-MONTH('1976-09-29') > 0 
    THEN
        year(getdate())-year('1976-09-29')
    ELSE 
	    CASE WHEN MONTH(getdate())-MONTH('1976-09-29') = 0 
        THEN
		    CASE WHEN Day(getdate()) - Day('1976-09-29') < 0 
            THEN
			    year(getdate())-year('1976-09-29')-1
		    ELSE 
			    year(getdate())-year('1976-09-29')
		    END
	    ELSE
		    year(getdate())-year('1976-09-29')-1
	    END
    END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值