Формат номера телефона в БД
От: Мёртвый Даун Россия  
Дата: 19.06.19 04:56
Оценка:
В БД совсем не силен, поэтому есть вопрос.

Есть рабочая Postgres SQL БД. Есть приложения которые с ней работают. Есть таблица, в которой есть текстовое поле номера телефона, без всякого форматирования. Одна запись содержит один номер. Но поскольку база используется с лохматых времен, номера все вбиты как попало. Например,
+420 773 74 43 54 (с пробелами)
420774436432 (всё слитно, и без плюса)
77237 8334 (просто как попало, и без кода страны)
+(420) 77378 03 95 (так же как попало, и со скобками)

и т.д.

Т.е. просто как попало, без маски ввода и всякого форматирования.

Хочется привести к одному читаемому виду с каким либо форматированием. Номера все полные и валидные по количеству цифр.

Например, пусть все номера будут записаны вот так: +(420) 773 744354

Как это сделать? Средствами SQL можно?
Только Путин, и никого кроме Путина! О Великий и Могучий Путин — царь на веки веков, навсегда!
Смотрю только Соловьева и Михеева, для меня это самые авторитетные эксперты.
КРЫМ НАШ! СКОРО И ВСЯ УКРАИНА БУДЕТ НАШЕЙ!
Re: Формат номера телефона в БД
От: wildwind Россия  
Дата: 19.06.19 06:14
Оценка: +5
Здравствуйте, Мёртвый Даун, Вы писали:

МД>Как это сделать?

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

МД>Средствами SQL можно?

Технически да, вопрос только в том, хватит ли его выразительности (и твоего владения), для всех случаев вашего "как попало". Но учитывая "БД совсем не силен", делай лучше кодом.
Re: Формат номера телефона в БД
От: #John Европа https://github.com/ichensky
Дата: 24.06.19 06:01
Оценка:
Здравствуйте, Мёртвый Даун, Вы писали:


МД>Например, пусть все номера будут записаны вот так: +(420) 773 744354

МД>Как это сделать? Средствами SQL можно?
1. Пофиксить данные в бд.(регулярками/скриптом/вручную напр.)
2. Показывать данные как надо.
Підтримати Україну у боротьбі з країною-терористом.

https://prytulafoundation.org/
https://u24.gov.ua/

Слава Збройним Силам України!!! Героям слава!!!
Re: Формат номера телефона в БД
От: TMU_1  
Дата: 26.06.19 08:34
Оценка:
МД>Т.е. просто как попало, без маски ввода и всякого форматирования.
МД>Хочется привести к одному читаемому виду с каким либо форматированием. Номера все полные и валидные по количеству цифр.
МД>Например, пусть все номера будут записаны вот так: +(420) 773 744354
МД>Как это сделать? Средствами SQL можно?


Разумеется, можно. Только перед началом экспериментов заведи отдельное поле или табличку и складывай результат туда. Во избежание.
Re: Формат номера телефона в БД
От: biochemist СССР https://www.anekdot.ru/i/caricatures/normal/20/7/27/1595846503.jpg
Дата: 26.06.19 09:27
Оценка:
Здравствуйте, Мёртвый Даун, Вы писали:

МД>В БД совсем не силен, поэтому есть вопрос.


МД>Есть рабочая Postgres SQL БД. Есть приложения которые с ней работают. Есть таблица, в которой есть текстовое поле номера телефона, без всякого форматирования. Одна запись содержит один номер. Но поскольку база используется с лохматых времен, номера все вбиты как попало. Например,

МД>+420 773 74 43 54 (с пробелами)
МД>420774436432 (всё слитно, и без плюса)
МД>77237 8334 (просто как попало, и без кода страны)
МД>+(420) 77378 03 95 (так же как попало, и со скобками)

МД>и т.д.


МД>Т.е. просто как попало, без маски ввода и всякого форматирования.


МД>Хочется привести к одному читаемому виду с каким либо форматированием. Номера все полные и валидные по количеству цифр.


МД>Например, пусть все номера будут записаны вот так: +(420) 773 744354


МД>Как это сделать? Средствами SQL можно?

Translate(fild_name,'+() ', null) удалит всё лишнее.
Я бы хранил в поле типа намбер, а в удобочитаемый вид приводил при отображении с помощью формат_маск.
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.
Re[2]: Формат номера телефона в БД
От: wildwind Россия  
Дата: 10.07.19 06:34
Оценка:
Здравствуйте, biochemist, Вы писали:

B>Я бы хранил в поле типа намбер


Не смог бы. Телефонные номера могут состоять не только из цифр.
Re[3]: Формат номера телефона в БД
От: biochemist СССР https://www.anekdot.ru/i/caricatures/normal/20/7/27/1595846503.jpg
Дата: 10.07.19 13:38
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Не смог бы. Телефонные номера могут состоять не только из цифр.

Хм.. если добавочные с *#, то их можно хранить отдельно. W и P — это к способу набора номера, а не к самому номеру. (Хотя ты прав — такое лучше иметь в базе) А что ещё, о чём я не знаю?
По любому — хранить надо в самом минимальном виде, без украшений из пробелов, скобок и тире.
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.
Re: Формат номера телефона в БД
От: scf  
Дата: 10.07.19 13:57
Оценка: +1
Здравствуйте, Мёртвый Даун, Вы писали:

МД>В БД совсем не силен, поэтому есть вопрос.


МД>Есть рабочая Postgres SQL БД. Есть приложения которые с ней работают. Есть таблица, в которой есть текстовое поле номера телефона, без всякого форматирования. Одна запись содержит один номер.


Это абсолютно правильный подход, т.к. телефонный номер — вещь сложная. Клиенты в это поле могут писать что угодно, включая предпочтительное время звонка, "позовите ивана петровича" и т.п.

Унификация номера телефона имеет смысл только при его автоматической обработке — смс-ботом например.
Re[4]: Формат номера телефона в БД
От: mogadanez Чехия  
Дата: 10.07.19 17:38
Оценка:
Здравствуйте, biochemist, Вы писали:

B>Здравствуйте, wildwind, Вы писали:


W>>Не смог бы. Телефонные номера могут состоять не только из цифр.

B>Хм.. если добавочные с *#, то их можно хранить отдельно. W и P — это к способу набора номера, а не к самому номеру. (Хотя ты прав — такое лучше иметь в базе) А что ещё, о чём я не знаю?

бывают совсем буквенные https://www.apple.com/contact/

You can buy online, chat, or call (800) MY–APPLE

Re[5]: Формат номера телефона в БД
От: biochemist СССР https://www.anekdot.ru/i/caricatures/normal/20/7/27/1595846503.jpg
Дата: 10.07.19 17:41
Оценка:
Здравствуйте, mogadanez, Вы писали:

M>бывают совсем буквенные https://www.apple.com/contact/


M>

M>You can buy online, chat, or call (800) MY–APPLE

Это не номер а способ запоминания номера.
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.
Re[6]: Формат номера телефона в БД
От: mogadanez Чехия  
Дата: 10.07.19 20:05
Оценка:
Здравствуйте, biochemist, Вы писали:

B>Это не номер а способ запоминания номера.


какая разница — оно в таком виде может попасть в базу, если его преобразовывать в числовой вид — то это потеря данных, назад одназначно не конвертнуть
Re: Формат номера телефона в БД
От: pugv Россия  
Дата: 11.07.19 13:09
Оценка:
Здравствуйте, Мёртвый Даун, Вы писали:

МД> Как это сделать? Средствами SQL можно?


Можно конечно. В лоб (T-SQL, Postgres под рукой нет, могут быть отличия):
SELECT CASE
           WHEN left(tel, 1) = '+' THEN -- start with + means includes country code
               left(tel, 1) + '(' + substring(tel, 2, 3) + ') ' + substring(tel, 5, 3) + ' ' + substring(tel, 8, len(tel))
           WHEN left(tel, 3) = '420' THEN -- start with country code without +
               '+' + '(' + substring(tel, 1, 3) + ') ' + substring(tel, 4, 3) + ' ' + substring(tel, 7, len(tel))
           ELSE -- without country code
               '+(420) ' + substring(tel, 1, 3) + ' ' + substring(tel, 4, len(tel))
       END
  FROM (SELECT REPLACE (tel, ')', '') tel
          FROM (SELECT REPLACE (tel, '(', '') tel
                  FROM (SELECT REPLACE (tel, ' ', '') tel
                          FROM (SELECT * 
                                  FROM (
                                      VALUES 
                                          ('+420 773 74 43 54'),  
                                          ('420774436432'), 
                                          ('77237 8334'), 
                                          ('+(420) 77378 03 95')
                                       ) AS t(tel)
                               ) t1
                       ) t2
               ) t3
       ) t4


+(420) 773 744354
+(420) 774 436432
+(420) 772 378334
+(420) 773 780395
Re[2]: Формат номера телефона в БД
От: Mr.Delphist  
Дата: 11.07.19 13:19
Оценка: +1
Здравствуйте, biochemist, Вы писали:

B>Я бы хранил в поле типа намбер, а в удобочитаемый вид приводил при отображении с помощью формат_маск.


У телефонных номеров, как уже писал ранее
Автор: Mr.Delphist
Дата: 06.05.19
, могут быть ведущие нули. При форматировании в Number эти "незначащие" цифры внезапно теряются
Re[2]: Формат номера телефона в БД
От: Ops Россия  
Дата: 25.07.19 14:44
Оценка:
Здравствуйте, scf, Вы писали:

scf>Унификация номера телефона имеет смысл только при его автоматической обработке — смс-ботом например.


Да не только. Можно показать на сайте ссылку вида tel:322223, куда звонить при клике по ней, если там хрень вбита?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.