我有我的sql数据库,我想过滤掉所有有效的手机号码。
我目前使用如下;
WHERE pn.PhoneNumber LIKE '+[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR pn.PhoneNumber LIKE '[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 pn.PhoneNumber LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
OR pn.PhoneNumber LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9]'
但我仍会收到0000000
,0
,0000
等数字
有些数字不是爱尔兰手机,因为它们不以08
开头
如果我希望数字的开头以087
开头,我只需输入[0][8][7]
而不是[0-9]
来解决问题吗?
答案 0 :(得分:1)
试试这个!
这会给出以087
和mobile(length)=10
select * from table where mobile_number like '087%' and LEN(mobile_number)=10
答案 1 :(得分:0)
我会创建一个包含我感兴趣的所有前缀的表,然后使用它来进行验证。
像......那样的东西。
Create table Allowed ( Prefix VARCHAR(10) )
insert into allowed values ( '071' );
insert into allowed values ( '072' );
insert into allowed values ( '+44' );
select count(prefix) as OK
from allowed
where REPLACE( pn.phonenumber, ' ', '') like prefix || '%'
您仍然可以单独进行数值验证,或将正则表达式部分合并到上面添加的后缀中。
答案 2 :(得分:0)
我知道这已经过时了,但只为有人可能觉得有用的英国手机号码开发了代码。在前5个号码后检查是否有空格,连字符等,如果号码无效则返回空白 - 我需要将记录上传到拒绝包含无效手机号码但接受空白的记录的第三方。
Mobile = CASE WHEN MobileTel LIKE '07[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]%' THEN left(MobileTel,11) WHEN MobileTel LIKE '07[0-9][0-9][0-9][^0-9][0-9][0-9][0-9][0-9][0-9][0-9]%' THEN (LEFT(MobileTel,5)+substring(MobileTel,7,6)) ELSE '' END