有一行'/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
答案 0 :(得分:2)
您可以使用REGEXP_SUBSTR
进行拆分,并使用LISTAGG
组合路径。
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] |