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
以下是在 MySQL 中执行相同任务的示例 - 使用递归 CTE:
小提琴
考虑到其完全疯狂的消息,将其转换为 Oracle 可以理解的代码,这不需要我......
附言。该代码还假设与模式对应的值不能是另一个值(例如 GGB62252 和 GGB622520)的子字符串。如果不满足此条件,代码将无法正常工作。