Подтвердить что ты не робот

Oracle: замена нечисловых символов в строке

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

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

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

4b9b3361

Ответ 1

Вы можете использовать REGEXP_REPLACE, поскольку Oracle 10:

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

В этом примере возвращается 349471234562013.

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

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

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

    '\D+'
    

Ответ 2

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

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

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