powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / REGEXP_REPLACE шаблон
15 сообщений из 15, страница 1 из 1
REGEXP_REPLACE шаблон
    #39437019
lenysik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Прошу подсказать, как мне изменить, чтобы функция отрабатывала корректно.
Имеется
id
1599795
1599631
1599795


Использую
select regexp_replace(listagg(id, ';'),'([^;]+)(;\1)+', '\1')

Но результат 1599631599795;1599795

А надо получить 1599631;1599795

Пробовала вот так
REGEXP_REPLACE(listagg(id, ';'),'([[:digit:]]{1,})([[:space:][:punct:]]+\1)+','\1')
не изменяется результат.

Где ошибка?
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437023
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Distinct? Row_number?
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437028
lenysik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AmKad,

distinct нельзя. Помимо id есть другие столбцы, которые суммируются
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437039
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Distinct нельзя rown_number. Осталось решить, куда поставить запятую.

Приводи пример исходных данных и желаемого результата: как задавать вопросы по sql
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437043
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lenysik,

Может через подзапрос сгруппировать по ID?
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437047
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,

Зачем?
Можно же обойтись:

select regexp_replace(listagg(id, ';') WITHIN group (order by id),'([^;]+)(;\1)+', '\1')
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437052
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedooselect regexp_replace(listagg(id, ';') WITHIN group (order by id),'([^;]+)(;\1)+', '\1')Для общего случая склеивания уникальных значений - это говнокод отработает некорректно.
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437055
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

Тогда может через подзапрос сгруппировать по ID?
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437067
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooТогда может через подзапрос сгруппировать по ID?Я не знаю, что у нее (него) там за данные. Интуиция у меня не развита, с телепатией тоже не очень. Любая неоднозначность в постановке убивает всякое желание заниматься подбором решений. Если топикстартер сдаст нужные анализы, то появится возможность установить диагноз, чтобы назначить правильное и комплексное лечение.
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437072
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadу нее (него)Блондинка:
lenysikПробовала
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437235
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lenysikИспользую
select regexp_replace(listagg(id, ';'),'([^;]+)(;\1)+', '\1')Для того, чтоб заматчило всю строку надо не забывать про разделитель, следюущий после значений.
Код: plsql
1.
2.
select regexp_replace(str, '([^;]+)(;\1)+(;)', '\1\3') str_dist
from (select '12;12;13;13;13;14;15;15;15;666;6665;54;540;3434;3434;34;90' str from dual)


Код: plsql
1.
2.
3.
4.
STR_DIST                              
--------------------------------------
12;13;14;15;666;6665;54;540;3434;34;90
1 row selected.
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437296
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lenysikДобрый день!
Имеется
id
1599795
1599631
1599795


lenysikА надо получить 1599631;1599795



решение

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with sub as (SELECT '1599795' str FROM dual
union 
SELECT '1599631' str FROM dual
union 
SELECT '1599795' str FROM dual
  ) 
SELECT listagg (s.str, ';')within group (order by s.str) str
  FROM sub s
;



Что мудрили, я не понял.
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437298
_kyky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В хвосте не работает ....

select regexp_replace(str, '([^;]+)(;\1)+(;)', '\1\3') str_dist
from (select '12;12;13;13;13;14;15;15;15;666;6665;54;540;3434;3434;34;34;34;90;90' str from dual)

12;13;14;15;666;6665;54;540;3434;34;90;90
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437312
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_kykyВ хвосте не работает ....

select regexp_replace(str, '([^;]+)(;\1)+(;)', '\1\3') str_dist
from (select '12;12;13;13;13;14;15;15;15;666;6665;54;540;3434;3434;34;34;34;90;90' str from dual)

12;13;14;15;666;6665;54;540;3434;34;90;90Это ж так трудно додуматься до (;|$).

PS. На всякий случай уточню, что вместо подобного вырезания дублей лучше недопускать их склеивания (с помощью той же аналитики - как уже было сказано).
...
Рейтинг: 0 / 0
REGEXP_REPLACE шаблон
    #39437317
_kyky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Для тех кто не в теме думаю да! Удачи!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / REGEXP_REPLACE шаблон
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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