如何列出标签中的所有条目

时间:2018-05-25 03:00:53

标签: sql regex oracle

有一行'/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 :(得分:2)

您可以使用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

<强> Results

|                                                         ALL_PATHS |
|-------------------------------------------------------------------|
| [/home/pc/test/alseko][/home/pc/test/archive][/home/pc/test/logs] |