实现思想:
- 先用当前年 — 出生年,此时得到的是有误差的年龄,误差在于今年该人有没有过生日,如果没有应该减一岁
- 比较当前所在月日和出生月日
1、如果当前月日大于等于出生月日,说明今年还没有过生日,上面得到的误差年龄减一即实际年龄
2、如果当前月日大于等于出生月日,说明今年已经过生日了,上面得到的误差年龄就是实际年龄
注:我使用的表中出生日期字段存的是字符串,格式(yyyy-MM-dd HH24:mi:ss),如果你使用的是date类型,可以通过转换函数转化一下即可
select birthday as 出生日期,
-- extract函数用于提取日期中的特定部分
EXTRACT(YEAR FROM SYSDATE) as 当前年,
substr(birthday, 0, 4) as 出生年,
EXTRACT(YEAR FROM SYSDATE) - substr(birthday, 0, 4) as 有误差年龄,
to_char(sysdate, 'mmdd') as 当前月日,
substr(birthday, 6, 2) || substr(birthday, 9, 2) as 出生月日,
case
when to_char(sysdate, 'mmdd') >= substr(birthday, 6, 2) || substr(birthday, 9, 2) then 0
else 1
end as 要减去的年数,
-- 核心SQL
EXTRACT(YEAR FROM SYSDATE) - substr(birthday, 0, 4) -
(case
when to_char(sysdate, 'mmdd') >= substr(birthday, 6, 2) || substr(birthday, 9, 2) then 0
else 1
end) as 最终年龄
from yw_cz_ryjbxx
查询结果:
result.png