2013年(1)
分类: 数据库开发技术
2013-04-25 15:38:30
旁边同事问,输入手机号码“861XXXXXXXXXX“,查询用户信息表,返回空行。但表里明明有这个号码啊。。。
上线复制表里的那个字段,粘贴下来一看,换行了,原来末尾有chr(10)和chr(13)这类东东。。。。
这个字段是存储手机号码的,只能有数字组成,但经常进去一些莫名其妙的字母、空格之类的东东,要不就是缺一些数字。
这可以通过使用更严格的约束来解决,测试一下:
create table test9 (id number,
cc varchar2(15)
check(regexp_replace(cc,'^(861)([0-9]{10})','') is null)); --只能是数字,且只能13个
insert into test9 values(1,'8613452289719')
insert into test9 values(1,'861345228971') ; ---12个数字,违反约束
ORA-02290: check constraint (MM.SYS_C00219229) violated
insert into test9 values(1,'861345228971A') --有字母,违反约束
ORA-02290: check constraint (MM.SYS_C00219229) violated
其他类似的约束也可以用这个函数实现:
只能是大写字母:
check(regexp_replace(cc,'[A-Z]{1,}','') is null)
只能是小写字母:
check(regexp_replace(cc,'[a-z]{1,}','') is null)
只能是字母:
check(regexp_replace(cc,'[a-zA-Z]{1,}','') is null)