В БД есть записанные номера телефонов, часто с не нужными символами типо тире скобки итд
Можно ли сделать запрос в котором будут удаляться эти символы и сравниваться с заданным значением ?
То есть символы нужно удалять при запросе, а не совсем из базы данных
Возможно ли сделать такой запрос на Postgres ?
И если нет то как лучше решить мою задачу, делать дополнительное поле в БД куда писать отформатированный телефон или еще есть варианты ?
В PostgreSQL богатый набор
В PostgreSQL богатый набор строковых функций:
http://postgresql.ru.net/manual/functions-string.html
ваша задача решается элементарно. Допустим у вас есть таблица tnumbers, в которой есть поле tel, содержащее телефоны в формате +7(123)456-78-90. Тогда, чтобы получить голый номер телефона без "+", "(", ")" и "-" можно написать:
SELECT translate(tel,'-+()','') FROM tnumbers;
Спасибо, похоже то что
Спасибо, похоже то что нужно!
Но а как удалить все символы кроме цифр ?
люди же могут по ошибке вписать еще что то кроме скобок, тире и +
А для этого существует
А для этого существует проверка вводимых данных в том самом приложении, которое позволяет вписывать. По уму - именно так.
Можно, конечно, ещё на таблицу повесить триггер или ограничение CHECK для поля, но это (на мой взгляд) не лучшее решение, потому что заставляет СУБД заниматься несвойственным ей делом - валидацией введённых данных