sql server语言 - sql移动号码验证



我有我的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]吗?

试试这个!

这将给出以087mobile(length)=10开头的数字

select * from table where mobile_number like '087%' and LEN(mobile_number)=10

我将创建一个包含所有我感兴趣的前缀的表,然后使用它来进行验证。

比如....

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 || '%'

您仍然可以单独执行数字验证,或者将regexp部分合并到上面添加的后缀中。

我知道这已经过时了,但是刚刚开发了一个英国手机号码的代码,有人可能会觉得有用。它检查前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

最新更新