Проверка телефонных номеров с определенными префиксами / кодами стран в sql - PullRequest
0 голосов
/ 30 октября 2019

У меня есть записи номеров мобильных телефонов, которые поступают в базу данных, и большинство номеров начинаются с 27, 0, +27 и 0027. Поэтому я построил запрос ниже, и он работает просто отлично. Единственная проблема заключается в том, что я недавно обнаружил, что есть некоторые числа, которые не содержат префиксов.

Когда число входит без префикса, оно всегда имеет 9 цифр, например 823744777, поэтому я предполагаю, что яможет использовать 9 цифр в качестве первой точки вызова в моей проверке. Как я могу изменить запрос ниже, чтобы обслужить такие числа (обслуживая 9-значные значения, которые не начинаются с 0, 27, 0027 или +27)

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

1 Ответ

1 голос
/ 30 октября 2019

Использовать расширенный оператор LIKE SQL Server:

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 получил удар.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...