Найти, выбрать и убрать дубликаты в pl/sql

Необходимо в строке найти слово "ГГБ" и показать результат , убирая дубликаты

Строки с данными

;;;ГГБ62252ЦДБ62252ГГБ62251Г-ка162252ГГБ62252Г-ка462252Г-ка562252Г-ка662252Г-ка762252Г-ка862252Г-ка962252Г-ка1062252

и

;;;ГГБ62252ЦДБ62252ГГБ62252Г-ка162252ГГБ62252Г-ка462252Г-ка562252Г-ка662252Г-ка762252Г-ка862252Г

Таблица введите сюда описание изображения

Результат необходимо такой(без дубликатов). Результат данного варианта предпочтителен

введите сюда описание изображения

Либо так

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Akina

Вот пример выполнения той же задачи на MySQL - используется рекурсивный CTE:

WITH RECURSIVE
cte1 (value) AS (
  SELECT ';;;ГГБ62252ЦДБ62252ГГБ62251Г-ка162252ГГБ62252Г-ка462252Г-ка562252Г-ка662252Г-ка762252Г-ка862252Г-ка962252Г-ка1062252'
),
cte2 (occurence, value) AS (
  SELECT REGEXP_SUBSTR(value,
                       'ГГБ\\d+'),
         REPLACE(value,
                 REGEXP_SUBSTR(value,
                               'ГГБ\\d+'), 
                 ',')
  FROM cte1
  UNION ALL
  SELECT REGEXP_SUBSTR(value,
                       'ГГБ\\d+'),
         REPLACE(value,
                 REGEXP_SUBSTR(value,
                               'ГГБ\\d+'), 
                 ',')
  FROM cte2
  WHERE REGEXP_SUBSTR(value,
                      'ГГБ\\d+') IS NOT NULL
)
SELECT occurence
FROM cte2
occurence
ГГБ62252
ГГБ62251

fiddle

Превращать это в код, который понимает Oracle, с учётом его совершенно невменяемых сообщений - без меня...

PS. Также код предполагает, что соответствующее шаблону значение не может являться подстрокой другого значения (ГГБ62252 и ГГБ622520, например). При невыполнении это условия код будет работать неправильно.

→ Ссылка