powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Пятничные телефонные маски
5 сообщений из 30, страница 2 из 2
Пятничные телефонные маски
    #39533048
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
rpovarov,

да что-то ты перемудрил... так проще:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with m(id, mask, phone_num) as
(
  select 1, '\\999-99-99', '4951234' from dual
  union all
  select 6, 'Типа номер и всё такое: \9\-\8\-9999999\;', '4959009' from dual
  )
select 
    id, mask, phone_num, regexp_replace(result,'\\(.)','\1') result
from m
model
    dimension by (id)
    measures (mask, phone_num, regexp_replace(mask,'((\\.)*)9','\1'||chr(1)) result)
    rules iterate(15) -- тут тупо максимальную длину номера указать
    (
        result[any] = regexp_replace(result[cv()]
                                    ,chr(1)
                                    ,substr(phone_num[cv()], iteration_number+1,1)
                                    ,1,1
                                    )
    )
order by id;

...
Рейтинг: 0 / 0
Пятничные телефонные маски
    #39533059
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,
Красиво :) Пойду курить документацию по MODEL.
...
Рейтинг: 0 / 0
Пятничные телефонные маски
    #39533202
slow brain
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброе утро.

xtender, варианты "в лоб" не работают для шаблона с экранированным символом в конце (\+\7\(999\)999\-99\-99\;). Модель - работает.

Мой вариант: (добавил строки с комментарием относительно исходного однострочного)
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 with m as (
   select '999\-999\-99\-99' mask, '4959009876' num from dual union all
           select '\9\-\8\-9999999999\;' mask, '4959009876' num from dual union all
           select '\+\7\(999\)999\-99\-99\;\1', '4959009876' num from dual)
     , m1 as (select num, replace(mask, '\9','\'||chr(1)) mask from m)
     , fmt as (select num
                    , rtrim(ltrim(replace(regexp_replace(' '||m1.mask, '(^9|[^9]|$)+',')('),'9','.'),')'),'(') mask_str
                    , listagg(txt,'') within group(order by lvl) format_str
                 from m1
                    , (select level lvl
                            , mask --для нескольких строк источника
                            , replace(replace(ltrim(regexp_substr(' '||mask,'(^9|[^9])+',1, level),'\9'),chr(1),'9'),'\')||'\'||level txt
                         from m1
                      connect by regexp_substr(' '||mask,'(^9|[^9])+',1, level) is not null 
                        and mask=prior mask and prior dbms_random.value is not null --для нескольких строк источника
                      ) a
                where m1.mask = a.mask --для нескольких строк источника
                group by m1.mask, num
              )
select phone_num from (              
select regexp_replace(num, mask_str, format_str) phone_num from fmt)
;



Принявшим участие - огромное спасибо.
...
Рейтинг: 0 / 0
Пятничные телефонные маски
    #39533207
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
slow brainМой вариант: (добавил строки с комментарием относительно исходного однострочного)


"...и эти люди мне запрещали копаться в носу..." :)
rpovarov, слишком перегружено.
...
Рейтинг: 0 / 0
Пятничные телефонные маски
    #39533276
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
slow brain,

По коду видно что не будет у тебя работать на \\9.
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Пятничные телефонные маски
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]