Oracle出生日期根据身份证号更新
2014-05-09 11:53
393 查看
需求:有个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)
[b]//15位[/b]
[b]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)[/b]
[b]扩展知识:(18位)[/b]
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
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是农村。
第五、六位数字则表示户籍所在地的区、县、县级市、旗。
字段 :生日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)
[b]//15位[/b]
[b]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)[/b]
[b]扩展知识:(18位)[/b]
号码的结构和表示形式
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是农村。
第五、六位数字则表示户籍所在地的区、县、县级市、旗。
15位的身份证号码: (1)1~6位为地区代码 (2)7~8位为出生年份(2位),9~10位为出生月份,11~12位为出生日期 (3)第13~15位为顺序号,并能够判断性别,奇数为男,偶数为女。
相关文章推荐
- 根据用户输入的二代身份证号码自动为其计算生成出生日期的javascript方法
- 根据身份证号码更新生日日期存储过程
- js实现根据身份证号自动生成出生日期
- Oracle中根据出生日期计算年龄
- 根据身份证获取出生日期
- 转载 根据身份证号得到性别跟出生日期
- 根据身份证号,使用Java编写程序获取年龄、性别、出生日期
- C# 根据身份证号码判断出生日期和性别
- 2016-6-25 根据身份证号自动生成出生日期并无法改变
- VBNET整理软件---根据身份证号码识别出生日期,性别,生肖,搜了下网上的check不够全...自己做了下又..
- Java-根据身份证号获取年龄,性别,出生日期
- 根据身份证带出出生日期和性别
- 根据身份证获出生日期和性别---含C#代码
- JS根据身份证号提取出生日期并计算年龄
- oracle 根据出生日期计算精确年龄
- sql server 根据身份证号计算出生日期和年龄的存储过程
- 根据身份证号码计算出生日期、年龄、性别(18位);根据入职时间计算工龄。
- 根据身份证号,使用Java编写程序获取年龄、性别、出生日期
- JS 验证身份证号 根据身份证号获取出生日期
- 根据身份证号码计算出生日期、年龄、性别(18位) 根据入职时间计算工龄。