当前位置:首页 > 技能相关 > ORACLE > 正文内容

Oracle 根据身份证号码判断性别,年龄

admin1年前 (2024-01-01)ORACLE11090 修订时间:2024-01-01 13:25:01

一、Oracle根据身份证判断性别:

女生身份证:

372901198711043482

男生身份证:

372901197711043492

SQL语句如下:

select decode(mod (to_number(substr('372901198711043482' ,17, 1)),2 ),0, '女','男' ) as sex from dual;
select decode(mod (to_number(substr('372901197711043492' ,17, 1)),2 ),0, '女','男' ) as sex from dual;
select decode(mod (to_number(substr('372901198711043482' ,17, 1)),2 ),0, '2','1' ) as sex from dual;
select decode(mod (to_number(substr('372901197711043492' ,17, 1)),2 ),0, '2','1' ) as sex from dual;

二、Oracle根据身份证判断年龄:

方法一

select (to_char(sysdate, 'yyyy') - substr('372901197711043492', 7, 4)) age from dual;

方法二

select trunc(to_number(to_char(sysdate,'yyyymmdd'))/10000 - to_number(to_char(to_date('1982-8-28','yyyy-mm-dd'),'yyyymmdd'))/10000) from dual;

方法三

select trunc((to_char(sysdate,'yyyyMMdd')-to_char(to_date(substr('372901197711043492',7,8),'yyyy-MM-dd'),'yyyyMMdd'))/10000) from dual;

三、根据15、18位身份证获取年龄性别

select
   case
     when length(idcard) = 18 then
        ceil((to_char(sysdate, 'yyyyMMdd') - to_char(to_date(substr(idcard, 7, 8), 'yyyy-MM-dd'),  'yyyyMMdd')) / 10000)
     when length(idcard) = 15 then
        ceil((to_char(sysdate, 'yyyyMMdd') - to_char(to_date('19' || substr(idcard, 7, 6),'yyyy-MM-dd'),'yyyyMMdd')) / 10000)
     end as age,
   case
     when length(idcard) = 18 then
         decode(mod(to_number(substr(idcard, 17, 1)), 2),0,'2','1')
     when length(idcard) = 15 then 
         decode(mod(to_number(idcard), 2), 0, '2', '1')
     end as sex
   from usr where guid='230E20A6FFA1B41CE050AE0AC684959F'

上面获取的格式是”1990” 只包含了年没有包含出生日期,如果要包含出生日期”1990-01-12”,就得使用如下格式:

select
     case
      when length(idcard) = 18 then 
          ceil((to_char(sysdate, 'yyyyMMdd') - to_char(to_date(substr(idcard, 7, 8), 'yyyy-MM-dd'),'yyyyMMdd')) / 10000)
       when length(idcard) = 15 then
          ceil((to_char(sysdate, 'yyyyMMdd') - to_char(to_date('19' || substr(idcard, 7, 6),'yyyy-MM-dd'),'yyyyMMdd')) / 10000)
       end as age,
     case
       when length(idcard) = 18 then
           decode(mod(to_number(substr(idcard, 17, 1)), 2),0,'2','1')
       when length(idcard) = 15 then 
           decode(mod(to_number(idcard), 2), 0, '2', '1') 
       end as sex,
     case 
      when length(idcard) = 18 then 
         to_char(to_date(substr(idcard, 7, 8), 'yyyy-MM-dd'),'yyyy-MM-dd')
      when length(idcard) = 15 then
          to_char(to_date('19'||substr(idcard, 7,6), 'yyyy-MM-dd'),'yyyy-MM-dd')
      end as birthday,id as mobile,name,guid
from usr where guid='174BD3D5879C3BF0E050007F010077DC'
 您阅读本篇文章共花了: 

免责声明
本站内容均为博客主本人日常使用记录的存档,如侵犯你的权益请联系:lifei@zaiheze.com 546262132@qq.com 沟通删除事宜。本站仅带访问端口形式使用,已杜绝搜索引擎爬取。

扫描二维码推送至手机访问。

版权声明:本文由LIFEI - blog发布,如需转载请注明出处。

本文链接:http://www.lifeiai.com/?id=376

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。