需求:有个personinfo表
字段 :生日BIRTHDAY date类型
字段:身份证号 CARD VARCHAR2(30)
把数据库中生日全部根据身份证号截取的日期更新
//18位
UPDATE PERSONINFO k SET k.CARD='410725199301021256'
//15位
UPDATE PERSONINFO k SET k.CARD='421022881006452'
sql语句:
//18位
UPDATE PERSONINFO t SET t.BIRTHDAY="TO_DATE"(("SUBSTR"(t.CARD, 7, 8)), 'yyyy-MM-dd') WHERE t.id IN ( SELECT k.id FROM PERSONINFO k WHERE "LENGTH"(k.CARD)=18)
//15位
UPDATE PERSONINFO t SET t.BIRTHDAY="TO_DATE"((CONCAT(19,"SUBSTR"(t.CARD, 7, 6))), 'yyyy-MM-dd') WHERE t.id IN ( SELECT k.id FROM PERSONINFO k WHERE "LENGTH"(k.CARD)=15)
扩展知识:(18位)
号码的结构和表示形式
1.号码的结构
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
2.地址码
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3.出生日期码
表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4.顺序码
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。
5.校验码
根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
地址码
(身份证号码前六位)表示编码对象常住户口所在县(市、镇、区)的行政区划代码。
北京市|110000,天津市|120000,河北省|130000,山西省|140000,内蒙古自治区|150000,辽宁省|210000,吉林省|220000,黑龙江省|230000,上海市|310000,江苏省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山东省|370000,河南省|410000,湖北省|420000,湖南省|430000,广东省|440000,广西壮族自治区|450000,海南省|460000,重庆市|500000,四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000,陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000,台湾省(886)|710000,香港特别行政区(852)|810000,澳门特别行政区(853)|820000
大陆居民身份证号码中的地址码的数字编码规则为:
第一位数字表示地区,1是华北,2 是东北,3是华东,4是中南,5是西南,6是西北。
第二位数字表示户籍地所在的直辖市、省、自治区在该地区中的排位,比如在华北地区,1代表北京市,2代表天津市,3代表河北省,4代表山西省,5代表内蒙古自治区。
第三、四位数字在户籍所在地是省、自治区的身份证号码中表示所在地的地区或地区级市(省辖市)、盟,在户籍地是直辖市的身份证号码中表示所在地的归属,01是城市,02是农村。
第一位数字表示地区,1是华北,2 是东北,3是华东,4是中南,5是西南,6是西北。
第二位数字表示户籍地所在的直辖市、省、自治区在该地区中的排位,比如在华北地区,1代表北京市,2代表天津市,3代表河北省,4代表山西省,5代表内蒙古自治区。
第三、四位数字在户籍所在地是省、自治区的身份证号码中表示所在地的地区或地区级市(省辖市)、盟,在户籍地是直辖市的身份证号码中表示所在地的归属,01是城市,02是农村。
第五、六位数字则表示户籍所在地的区、县、县级市、旗。
15位的身份证号码: (1)1~6位为地区代码 (2)7~8位为出生年份(2位),9~10位为出生月份,11~12位为出生日期 (3)第13~15位为顺序号,并能够判断性别,奇数为男,偶数为女。