首页 > 解决方案 > 如何列出标签中的所有条目

问题描述

有一行'/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

标签: sqlregexoracle

解决方案


您可以使用拆分REGEXP_SUBSTR和组合路径LISTAGG

SQL小提琴

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] |

推荐阅读