当前位置: 代码迷 >> Oracle管理 >> 依据身份证号,性别查询查女性年龄超过55周岁的,男性年龄超过60周岁的
  详细解决方案

依据身份证号,性别查询查女性年龄超过55周岁的,男性年龄超过60周岁的

热度:126   发布时间:2016-04-24 04:19:17.0
根据身份证号,性别查询查女性年龄超过55周岁的,男性年龄超过60周岁的
有15位或18位身份
表结构这样的

xingming   xingbie   shenfenzhao
小王           男              130503670401001
小王2           女              130503690401001
小王3          男              320282197705474589
小王4           男              320282196505474589

能查询出按性别区分,女的年龄超过55周岁,男的年龄超过60周岁的人
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

有15位或18位身份
表结构这样的

xingming   xingbie   shenfenzhao
小王           男              130503670401001
小王2           女              130503690401001
小王3          男              320282197705474589
小王4           男              320282196505474589

能查询出按性别区分,女的年龄超过55周岁,男的年龄超过60周岁的人

15位的身份证怎么判断年龄

7-12位出生年月日,比如670401代表1967年4月1日


with t as
 (select 'xw1' nm, 'M' sex, '130503370401001' ID
    FROM DUAL
  UNION ALL
  select 'xw2' nm, 'F' sex, '130503390401001' ID
    FROM DUAL
  UNION ALL
  select 'xw3' nm, 'M' sex, '320282194705074589' ID
    FROM DUAL
  UNION ALL
  select 'xw4' nm, 'M' sex, '320282196505174589' ID
    FROM DUAL)
select *
  from (select t1.*,
               months_between(SYSDATE,
                              to_date(decode(len,
                                             15,
                                             '19' 
------解决方案--------------------
 substr(id, 7, 6),
                                             18,
                                             substr(id, 7, 8),
                                             null),
                                      'yyyymmdd')) / 12 birth
          from (SELECT t.*, length(t.id) len FROM T) t1) t2
 where (t2.sex = 'M' AND T2.BIRTH > 60)
    OR (T2.SEX = 'F' AND T2.BIRTH > 55);

------解决方案--------------------
如果身份证都是合法的,就可以简单点(19770547实际上是非法日期)
SELECT XINGMING,
       XINGBIE,
       SHENFENZHAO,
       TO_DATE(CASE
                 WHEN LENGTH(SHENFENZHAO) = 15 THEN
                  '19' 
------解决方案--------------------
 SUBSTR(SHENFENZHAO, 7, 6)
                 ELSE