Oracle中使用SQL根据出生日期精确计算年龄

实现思想:
  • 先用当前年 — 出生年,此时得到的是有误差的年龄,误差在于今年该人有没有过生日,如果没有应该减一岁
  • 比较当前所在月日和出生月日
      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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。