加入收藏 | 设为首页 | 会员中心 | 我要投稿 航空爱好网 (https://www.52kongjun.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer中计算实际年龄的方法

发布时间:2022-10-28 15:00:38 所属栏目:MsSql教程 来源:网络
导读: Excel中有个计算日期差的函数datedif,SqlServer中也有一个类似函数datediff,但是两个函数的计算逻辑是不一致的:
Excel中的datedif函数,计算精度到日,不足日的月份差额要减一,不足月的

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

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

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

但是在SqlServer中,计算年份日期差是直接按照年份数值相减,而不会考虑是否足月;计算月份差也是直接年份加月份相减Mssq日期函数,也不会考虑日期是否不足,所以上面两个日期在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') 
			    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

(编辑:航空爱好网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!