[Oracle] regexp_replace

Boris1980

Хочу воспользоваться функцией regexp_replace, но толком не знаю регулярных выражений.
Нужно в запросе вывести телефон в удобно читаемом формате.
Т.е. на вход подается строка содержащая номер телефона (без кода страны, города и добавочного нужно расставить дефисы через два-три символа в зависимости от длины номера телефона.
"1234567" -> "123-45-67"
"123456" -> "12-34-56"
и т.д.
У меня какая-то лажа получается, помогите составить маску и маску подмены.

kindr-16

а чем pl/sql не угодил?

rosali

На перле вот так
s/^(\d+\d{2}\d{2})$/$1-$2-$3/;

Оракл не знаю, сорри :)

Boris1980

Спс. Завтра попробую.
Хотя это только одна маска, а в описании к функции их две.

uncle17

это для обеих

Boris1980

Честно сказать, не смог воспользоваться твоей подсказкой.
Строка остается без изменений.
select
regexp_replace ('1234567', 's/^(\d+\d{2}\d{2})$/$1-$2-$3/') n7_1,
regexp_replace ('1234567', 's/^(\d+\d{2}\d{2})$/$1-$2-$3/', 's/^(\d+\d{2}\d{2})$/$1-$2-$3/') n7_2
from dual;

kill-still


SELECT REGEXP_REPLACE ('1234567', '(\d+\d{2}\d{2})', '\1-\2-\3')
FROM DUAL;

Maurog

Честно сказать, не смог воспользоваться твоей подсказкой.
почитайте доку хотя бы, там пример есть
http://docs.oracle.com/cd/B19306_01/server.102/b14200/functi...

Boris1980

То, что нужно. Спасибо.
Оставить комментарий
Имя или ник:
Комментарий: