Как перечислить все записи в тегах - PullRequest
0 голосов
/ 25 мая 2018

Есть строка '/home/pc/test',
и слова в тегах '[/ alseko] [/ logs] [/ archive]'
Как получить ожидаемый результат =

[/home/pc/test/alseko][/home/pc/test/logs][/home/pc/test/archive]  

Мой код,Я пытаюсь найти:

select '[' || '/home/pc/test' ||
       ltrim(substr('[/alseko][/logs][/archive]',
              instr('[/alseko][/logs][/archive]', '['),
              instr('[/alseko][/logs][/archive]', ']')),'[')
from dual

1 Ответ

0 голосов
/ 25 мая 2018

Вы можете разделить, используя REGEXP_SUBSTR, и объединить пути, используя LISTAGG.

SQL Fiddle

Настройка схемы Oracle 11g R2 :

CREATE TABLE t
    ("LINE" varchar2(13), "TAGS" varchar2(31))
;

INSERT ALL 
    INTO t ("LINE", "TAGS")
         VALUES ('/home/pc/test', '[/ alseko] [/ logs] [/ archive]')
SELECT * FROM dual
;

Запрос 1 :

SELECT '[' || LISTAGG(paths, '][') WITHIN
GROUP (
        ORDER BY NULL
        ) || ']' as all_paths
FROM (
    SELECT line || '/' || REGEXP_SUBSTR(tags, '\[/ (.+?)\]', 1, LEVEL, NULL, 1) AS paths
    FROM t connect BY LEVEL <= REGEXP_COUNT(tags, '\[/ (.+?)\]')
    ) s

Результаты :

|                                                         ALL_PATHS |
|-------------------------------------------------------------------|
| [/home/pc/test/alseko][/home/pc/test/archive][/home/pc/test/logs] |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...