У меня есть таблица Contact
, содержащая все контакты пользователей с телефонными номерами, и мне нужно сделать некоторые преобразования для телефонных номеров.
Мне нужно просмотреть все номера телефонов и:
удалить следующую последовательность символов
(0)
, если она присутствует в номере телефона;добавить префикс
+<country_code>
, если он отсутствует и если номер телефона вставлен;
Пример:
Номер телефона:+1 (0) 121 121 121
необходимо преобразовать в: +1 121 121 121
Номер телефона:(0) 121 121 121
необходимо преобразовать в: +1 121 121 121
Номер телефона:121 121 121
необходимо преобразовать в: +1 121 121 121
По пункту 1:
Мы можем выбрать все номера телефонов с запросом:
select phone from contact where phone like '%(0)%';
а как убрать ту последовательность (0)
только из номера? Как создать для этого запрос на обновление?
По пункту 2:
Как распознать, что номер телефона не содержит прямой номер страны (префикс +<country_code>
), и добавить правильный, если он отсутствует? Возможно, этот запрос подойдет для выбора этих чисел:
select phone from contact where phone not like '%+%';
Мы можем это предположить. Предположим также, что у нас есть столбец страны в таблице контактов, и для списка кодов стран мы можем создать временную таблицу сопоставления на основе этого -> http://countrycode.org/. Мы можем просто создать временную таблицу, содержащую сопоставление кода страны ‹-› префикса страны, как показано ниже.
Я предполагаю, что должна быть возможность вызвать запрос на обновление, который на 1-м шаге выберет все телефонные номера в неправильном формате, а на 2-м шаге будет обновлен с новым правильным значением, верно? Я не очень хорошо знаю SQL, поэтому, пожалуйста, помогите мне создать такой SQL-запрос?
Таблица КОНТАКТ:
+-----+-----------+----------+---------+------------------------+
| id | firstname | lastname | country | phone |
+-----+-----------+----------+---------+------------------------+
| 100 | Frank | Grob | PL | +48 22 121 121 121 | <- OK
| 101 | Bob | Bloby | PL | (0)22 121 121 121 | <- Wrong
| 102 | Alice | Wonder | US | +1 (0) 121 121 121 | <- Wrong
| 103 | Chris | Black | US | +1 (0) 121 121 121 | <- Wrong
| 104 | Rocky | Rocky | US | +1 (0) 121 121 121 | <- Wrong
+-----+-----------+----------+---------+------------------------+
Таблица COUNTRY_MAPPING:
+-----+--------------+--------+
| id | country_code | prefix |
+-----+--------------+--------+
| 100 | PL | 48 |
| 101 | US | 1 |
+-----+--------------+--------+
(0)
или без прямого номера страны, это выполнимо (ваше решение выполняет это). Если мы хотим убедиться, что номер соответствует E.164, это сложно (здесь не требуется). - person Patrick Bacon   schedule 24.01.2015