Oracle: замена нечисловых символов в строке
У меня есть поле в моей базе данных, где пользователи сохраняют бесплатные телефонные номера. В результате данные имеют разные виды форматирования:
- (область) nnn-nnnn
- область-NNN-NNNN
- area.nnn.nnnn
- и т.д.
Я хотел бы удалить все нечисловые символы и просто сохранить цифры, но я не могу найти простой способ сделать это. Возможно ли без использования одного REPLACE для каждого char?
Ответы
Ответ 1
Вы можете использовать REGEXP_REPLACE, поскольку Oracle 10:
SELECT REGEXP_REPLACE('+34 (947) 123 456 ext. 2013', '[^0-9]+', '')
FROM DUAL
В этом примере возвращается 349471234562013
.
Альтернативные синтаксисы включают:
Ответ 2
Для более старых версий Oracle, которые не поддерживают регулярные выражения:
select translate (phone_no,'0'||translate (phone_no,'x0123456789','x'),'0')
from mytable;
Внутренний translate
получает все незнаковые символы с номера телефона, а внешний translate
затем удаляет их с номера телефона.