Перобразовать строку в запросе

В БД есть записанные номера телефонов, часто с не нужными символами типо тире скобки итд
Можно ли сделать запрос в котором будут удаляться эти символы и сравниваться с заданным значением ?

То есть символы нужно удалять при запросе, а не совсем из базы данных

Возможно ли сделать такой запрос на Postgres ?

И если нет то как лучше решить мою задачу, делать дополнительное поле в БД куда писать отформатированный телефон или еще есть варианты ?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

В PostgreSQL богатый набор

В PostgreSQL богатый набор строковых функций:
http://postgresql.ru.net/manual/functions-string.html

ваша задача решается элементарно. Допустим у вас есть таблица tnumbers, в которой есть поле tel, содержащее телефоны в формате +7(123)456-78-90. Тогда, чтобы получить голый номер телефона без "+", "(", ")" и "-" можно написать:

SELECT translate(tel,'-+()','') FROM tnumbers;

Спасибо, похоже то что

Спасибо, похоже то что нужно!

Но а как удалить все символы кроме цифр ?
люди же могут по ошибке вписать еще что то кроме скобок, тире и +

А для этого существует

А для этого существует проверка вводимых данных в том самом приложении, которое позволяет вписывать. По уму - именно так.
Можно, конечно, ещё на таблицу повесить триггер или ограничение CHECK для поля, но это (на мой взгляд) не лучшее решение, потому что заставляет СУБД заниматься несвойственным ей делом - валидацией введённых данных

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023