1、需求:数据库中有身份证号码,也有年龄字段,但是年龄字段不会自动更新,现在需要返回最新的年龄数据。
2、思路:获取当前年份,截取省份证中的年龄部分数据,再进行相减即可;
3、具体实现:
①获取当前年份:这个SQL查询的有很多;
-- 查询年份
select extract(year from now()) AS Year;
select to_char(now(),'yyyy') AS Year; -- 其中 now()也可以改写成 current_date 或 SELECT now()::timestamp ;
②截取省份证中的年龄部分数据:一般身份证都是18位,现在就以18位的为准,其他证件位数的计算方法也类型;
-- 截取函数 IdNumber 为身份证号码 为String;
SUBSTRING(IdNumber,7,4);
③进行相减:这个地方需要注意类型一致;所以需要对数据进行一个类型转换即可:如:int2、int4等;
-- 计算
select extract(year from now())- int2(SUBSTRING(身份证号,7,4)) AS age;
select id, (select extract(year from now())- int2(SUBSTRING(身份证号,7,4)) ) age FROM 表名;