oracle 根据身份证号码与指定日期计算年龄

自定义函数:

sql 复制代码
CREATE OR REPLACE FUNCTION 获取年龄(身份证号 varchar2, 指定时间 date)
RETURN varchar2
AS
年龄 varchar2(16);
BEGIN
  if length(身份证号) >=18 then
    SELECT TRUNC(    MONTHS_BETWEEN(指定时间,     TO_DATE(SUBSTR(身份证号, 7, 8), 'YYYYMMDD')    )   / 12) || '岁' into 年龄 FROM DUAL;
    if 年龄 ='0岁' then
      SELECT TRUNC(MONTHS_BETWEEN(指定时间, TO_DATE(SUBSTR(身份证号, 7, 8), 'YYYYMMDD'))) || '个月' into 年龄 FROM DUAL;
      if 年龄 ='0个月' then
         SELECT (TRUNC(指定时间) - TO_DATE(SUBSTR(身份证号, 7, 8), 'YYYYMMDD')) || '天'  into 年龄 FROM DUAL;
         if 年龄 ='0天' then
            SELECT '1天'  into 年龄 FROM DUAL;
         end if;
      end if;
    end if;
  end if;
   RETURN 年龄;

END;

测试结果:

相关推荐
Dovis(誓平步青云)1 分钟前
《SQL语义等价性检查:Pivot的CASE WHEN改写策略与限制》
linux·windows·sql·microsoft·oracle·stable diffusion
wmm_会飞的@鱼4 分钟前
FlexSim-基于SLP方法的A汽车企业总装车间布局优化
前端·数据结构·数据库·python·数学建模·汽车
北秋,8 分钟前
Web Security Academy 第三关:SQL 注入查询 Oracle 数据库版本
数据库·sql·oracle
whn19778 分钟前
继续,在centos10上安装pg
数据库
邮专薛之谦10 分钟前
MySQL 完整SQL指令大全(仅代码+备注)
数据库·oracle
夕除11 分钟前
spring boot 2
数据库
吠品14 分钟前
Node.js谜团:fs.Stats废弃警告的侦探之旅与破局之道
linux·服务器·数据库
Mike117.14 分钟前
GBase 8c 会话、锁等待和长 SQL 的日常巡检写法
java·数据库·sql
熊文豪15 分钟前
表空间目录自动创建:国产数据库云原生存储管理的关键演进
数据库·电科金仓
承渊政道19 分钟前
数据删了不等于销毁:KingbaseES敏感数据物理擦除实战指南
运维·服务器·数据库·数据仓库·安全·oracle·业界资讯