SQLserver使用dateadd()函数判断男女年龄是否超龄

最近遇到这样一个需求:

根据出生年月日查询每个人的年龄是否超龄,男性为60岁,女性为50岁。要求为超龄前一个月。

a.Gender为性别字段,1表示男,反之则是女,a.DateOfBirth表示出生日期

SELECT a.FullName, a.Gender, b.GenderName,

CONVERT(varchar(10), a.DateOfBirth, 120) AS DateOfBirth, (case a.Gender when 1 then (case when (dateadd(YEAR,60,a.DateOfBirth)-day(30))>getdate() then 未超龄 when dateadd(YEAR,60,a.DateOfBirth)<getdate() then 已超龄 else 即将超龄 end) else (case when (dateadd(YEAR,50,a.DateOfBirth)-day(30))>getdate() then 未超龄 when dateadd(YEAR,50,a.DateOfBirth)<getdate() then 已超龄 else 即将超龄 end) end)as OverAge FROM 人员表 AS a left join 性别表 as b on a.Gender=b.GenderNo

结果如下:当前日期为2022-11-29

思路:

select DATEADD(YEAR,10,getdate()) -- 1.年、月、日,2.长度,3.所选日期

首先查询男性,当Gender为1时,使用dateadd()函数将出生日期加60年(女性50)然后减去30天,

使用日期函数day(),将值与当前日期相比较,当前日期函数getdate(),大于当前日期则未超龄,小于则超龄,其他则为即将超龄。

这里要注意的是:

即将超龄的条件是一个区间,所以先判断未超龄和已超龄的情况,剩下的自然就是即将超龄的。

结尾:

其实这些应该也挺简单的,使用的也都是些简单的运算和判断,只是这些函数平时用的少了些。

经验分享 程序员 微信小程序 职场和发展