Найти, выбрать и убрать дубликаты в 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 |
Превращать это в код, который понимает Oracle, с учётом его совершенно невменяемых сообщений - без меня...
PS. Также код предполагает, что соответствующее шаблону значение не может являться подстрокой другого значения (ГГБ62252 и ГГБ622520, например). При невыполнении это условия код будет работать неправильно.