Oracle: замена нечисловых символов в строке - PullRequest
26 голосов
/ 19 октября 2010

В моей базе данных есть поле, в котором пользователи сохранили номера телефонов произвольной формы.В результате данные имеют различное форматирование:

  • (область) nnn-nnnn
  • area-nnn-nnnn
  • area.nnn.nnnn
  • и т. Д.

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

Ответы [ 2 ]

57 голосов
/ 19 октября 2010

Вы можете использовать REGEXP_REPLACE начиная с Oracle 10:

SELECT REGEXP_REPLACE('+34 (947) 123 456 ext. 2013', '[^0-9]+', '')
FROM DUAL

Этот пример возвращает 349471234562013.

Альтернативные синтаксисы включают в себя:

  • Классы символов POSIX:

    '[^[:digit:]]+'
    
  • Расширения под влиянием Perl (начиная с Oracle 11):

    '\D+'
    
12 голосов
/ 19 октября 2010

Для более старых версий Oracle, которые не поддерживают регулярные выражения:

select translate (phone_no,'0'||translate (phone_no,'x0123456789','x'),'0')
from mytable;

Внутренний translate получает все нецифровые символы с номера телефона, а внешний translate затем удаляетих с номера телефона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...