如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_EXPadd 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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)