oracle根据身份z号字段信息更新出生日期

oracle根据身份z号字段信息更新出生日期,第1张

身份z号分为15位和18位,处理方式略有不同,但也可以用一句sql语句来更新。

如test表中数据如下:

更新birthday字段的语句如下:

update test set birthday=case when length(sfz)=18 then substr(sfz,7,8) when length(sfz)=15 then '19'||substr(sfz,7,6) end

commit更新后结果:

alter table PUB_EMPLOYEE_EXP

add constraint PUB_EMPLOYEE_EXP身份z格式错误

check ((regexp_like(Idcard,'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')

Or

regexp_like(Idcard,'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9,X]'))

And length(IDCARd) in (15,18)

And Trim(Idcard)=Idcard

And instr(idcard,chr(10))=0)

这是个完整版的,包括长度,空格,换行符都做限制了

--假设表test,字段sex是性别,cert_number是身份z号码,都是varchar2类型

--15位 最后一位奇数或偶数代表一个人的性别

update test t set t.sex = decode(mod(to_number(t.cert_number),2),0,'男','女')

where upper(t.cert_number) not like '%X' and length(t.cert_number) = 15

--最后一位是X,且长度为15的,无法判断性别

update test t set t.sex = '最后一位是X,无法判断性别!'

where upper(t.cert_number) like '%X' and length(t.cert_number) = 15

--18位 倒数第=位的奇数或偶数代表男性或女性

update test t set t.sex = decode(mod(to_number(substr(t.cert_number,17,1)),2),0,'男','女')

where length(t.cert_number) = 18


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10856430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存