Как отобразить номера телефонов в SQL, которые содержат два и только два «0»? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь написать запрос, который будет извлекать телефонные номера из столбца, который отформатирован определенным образом. Этот формат вызывает у меня некоторые проблемы с извлечением нужных мне чисел.

Некоторый контекст: у меня есть таблица с названием Suppliers и столбец с именем Phone. Пример номера телефона: (010) 9984510. Все коды городов заключены в круглые скобки. В столбце есть несколько телефонных номеров в аналогичном формате. Мне нужно извлечь телефонные номера, которые содержат два И ТОЛЬКО два «0» в них. Вот что я попробовал:

select SupplierID, Phone
from Suppliers
where Phone like '%0%0%';

SupplierID - это просто столбец с идентификационным номером. Основная проблема, с которой я сталкиваюсь, заключается в том, как извлечь эти числа с двумя и только двумя нулями? Скобки заставляют меня извлечь больше чисел, чем нужно. Я не верю, что мне разрешено редактировать колонку, но любое решение приветствуется.

Ответы [ 4 ]

3 голосов
/ 31 января 2020

Вы можете использовать replace() и len():

where len(phone) - len(replace(phone, '0', '')) = 2
3 голосов
/ 31 января 2020

Используйте like и not like:

where Phone like '%0%0%' and Phone not like '%0%0%0%'
1 голос
/ 31 января 2020

Для «хихиканья» вы можете использовать совсем другой подход и считать 0 символов:

SELECT YT.*
FROM dbo.YourTable YT
     CROSS APPLY (SELECT COUNT(V.C) AS Zeroes
                  FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15))T(I) --I doubt a phone number will be over 15 characters long
                       CROSS APPLY (VALUES(SUBSTRING(YT.Phone,T.I,1)))V(C)
                  WHERE V.C = '0') Z
WHERE Z.Zeroes = 2;
0 голосов
/ 31 января 2020

Если вы хотите игнорировать код города

where phone like '%)%0%0%' and phone not like '%)%0%0%0%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...