sql根据身份证计算年龄。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql根据身份证计算年龄。相关的知识,希望对你有一定的参考价值。
求sql语句条 :字段nl 字段 sfz 要求把计算结写入nl(年龄字段) UPDATE 表 set nl=() 面计算来了
利用身份证号计算年龄,用Excel轻松搞定。
参考技术A 没有试过随手写仅供参考知道行update
a
set
a.nl=(year(getdate())
-
cast((select
substring(b.sfz,6,4)
from
person
b
where
b.sfz=a.sfz)
as
int))
from
person
a
各位兄弟都来,如何在sql里利用身份证查询出生日期?
在SQL里,我有一个表叫养老表,里面有这几列
姓名 居民身份号码 离退休日期
李四 有15位的 1998-09-08
………… 有18位的 …………
………… 有末尾是X的 ………………
大概就是这,请问如何利用sql语句查询出生日期,并且计算出他们退休时的年龄,关键是各样的身份证都有,头都大了!
case LEN(身份证号)
when 15 then convert(date, SUBSTRING(身份证号, 7, 6), 12) /*15位身份证号: 7-12位为yymmdd */
when 18 then convert(date, SUBSTRING(身份证号, 7, 8), 112) /*18位身份证号: 7-14位为yyyymmdd */
else NULL
end as 出生日期,
case LEN(身份证号)
/*身份证号出生日期后3位, 如果为奇数则性别为男, 55岁退休; 如果为偶数则为女, 50岁退休*/
when 15 then dateadd(year, case convert(int, SUBSTRING(身份证号,15,1))%2 when 1 then 55 else 50 end, convert(date, SUBSTRING(身份证号, 7, 6), 12) )
when 18 then dateadd(year, case convert(int, SUBSTRING(身份证号,17,1))%2 when 1 then 55 else 50 end, convert(date, SUBSTRING(身份证号, 7, 8), 112) )
else NULL
end as 退休日期
from 养老表 参考技术A 身份证只有15和18位的区分
按照你的要求做了一下简单的表
CREATE TABLE TEST_TAB
(
NAME VARCHAR2(60),
IDENTIFID VARCHAR2(30),
LEAVEDATE DATE
)
select a.NAME,
round((a.LEAVEDATE - to_date(substr(a.IDENTIFID,7,8),'yyyy/mm/dd'))/365)||'歳' ||
round(mod(((a.LEAVEDATE - to_date(substr(a.IDENTIFID,7,8),'yyyy/mm/dd'))/365),1)*12)||'月' ||
round(mod(mod(((a.LEAVEDATE - to_date(substr(a.IDENTIFID,7,8),'yyyy/mm/dd'))/365),1)*12,1)*10) ||'天' from
(
select NAME ,IDENTIFID , LEAVEDATE
from TEST_TAB
where length(IDENTIFID)=18
) a
union all
select a.NAME,
round((a.LEAVEDATE - to_date(concat('19',substr(a.IDENTIFID,7,6)),'yyyy/mm/dd'))/365)||'歳' ||
round(mod(((a.LEAVEDATE - to_date(concat('19',substr(a.IDENTIFID,7,6)),'yyyy/mm/dd'))/365),1)*12)||'月' ||
round(mod(mod(((a.LEAVEDATE - to_date(concat('19',substr(a.IDENTIFID,7,6)),'yyyy/mm/dd'))/365),1)*12,1)*10) ||'天' from
(
select NAME ,IDENTIFID , LEAVEDATE
from TEST_TAB
where length(IDENTIFID)=15
) a
因为没有考虑到性能问题。估计还得改善 参考技术B 和末尾没关系吧,最多判断下15位和18位
SELECT case when length(column)=18 then substring(column,7,8)
when length(column)=15 then concat('19',substring(column,7,6))
else '身份证号码不规范'
end
FROM TABLE
其中column是身份证号码字段 TABLE 是表名
算出出生年月,算退休就是加55年还是50年吧。这个加法太简单就不写了
以上是关于sql根据身份证计算年龄。的主要内容,如果未能解决你的问题,请参考以下文章