Sql server 在sql中验证带有特定前缀/国家/地区代码的电话号码

Sql server 在sql中验证带有特定前缀/国家/地区代码的电话号码,sql-server,excel,validation,Sql Server,Excel,Validation,我在数据库中输入了手机号码,大多数号码以27、0、+27和0027开头。因此,我构建了下面的查询,它运行得很好。唯一的问题是我最近发现有些数字不包含任何前缀 当一个没有前缀的数字输入时,它总是有9个数字,例如823744777,所以我假设我可以使用9个数字作为验证中的第一个调用点。我如何更改下面的查询以适应这些数字以及不以0、27、0027或+27开头的9位值 IF(@cellNumber2<> '' AND ((@cellNumber2 like '27%' and len(@ce

我在数据库中输入了手机号码,大多数号码以27、0、+27和0027开头。因此,我构建了下面的查询,它运行得很好。唯一的问题是我最近发现有些数字不包含任何前缀

当一个没有前缀的数字输入时,它总是有9个数字,例如823744777,所以我假设我可以使用9个数字作为验证中的第一个调用点。我如何更改下面的查询以适应这些数字以及不以0、27、0027或+27开头的9位值

IF(@cellNumber2<> '' AND ((@cellNumber2 like '27%' and len(@cellNumber2) !=11) 
OR (@cellNumber2 like '0%' and len(@cellNumber2) !=10) 
OR (@cellNumber2 like '+27%' and len(@cellNumber2) !=12)
OR (@cellNumber2 like '0027%' and len(@cellNumber2) !=13)))
BEGIN
    IF ((SELECT ISNULL(ClientId,0) FROM tbl_invalidNumbers
    WHERE ClientId = @ClientId) = 0)
    BEGIN
        INSERT INTO tbl_invalidNumbers(ClientId, cellNumber2)
        VALUES(@ClientId, @cellNumber2)
    END
    ELSE
    BEGIN
        UPDATE tbl_invalidNumbers
        SET cellNumber2 = @cellNumber2
        WHERE ClientId = @ClientId
    END
    UPDATE tbl_tempDataTable
    SET cellNumber2 = null WHERE ClientId = @ClientId
END
使用SQL Server的增强型LIKE运算符:

IF(@cellNumber2<> '' AND (
    (@cellNumber2 LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]') OR
    (@cellNumber2 LIKE '27%' AND LEN(@cellNumber2) != 11) OR
    (@cellNumber2 LIKE '0%' AND LEN(@cellNumber2) != 10) OR
    (@cellNumber2 LIKE '+27%' AND LEN(@cellNumber2) != 12) OR
    (@cellNumber2 LIKE '0027%' AND LEN(@cellNumber2) != 13))
)
BEGIN
...
我添加的额外检查将列出由任意9位数字组成的任何输入。否则,您的其他一个现有检查必须通过才能命中BEGIN块