sql - 如何列出标签中的所有条目
问题描述
有一行'/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
解决方案
您可以使用拆分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
结果:
| ALL_PATHS |
|-------------------------------------------------------------------|
| [/home/pc/test/alseko][/home/pc/test/archive][/home/pc/test/logs] |
推荐阅读
- c# - cookie 过期后从 Identity 注销会导致 http 错误 400
- sql - 如果未找到数据,则匹配第 1 列,然后搜索第 2 列 oracle 查询
- bash - 为什么 bash 中的 read 命令可以使用 herestring,但不能使用管道输出?
- java - 调用方法时 JSP 中的 Java NullPointerException
- azure - Azure 中的 Ocelot API 网关
- php - 从 Laravel 中的 Id 数组获取结果
- c# - 如何在统一 C# 中重新定义 Vector3 数组?
- swift - 如何将 UIBezierPath 添加到使用自动布局的 UIView?
- vue.js - 在 Vue 和 laravel 中单击按钮时显示和隐藏列的动态数据
- python - 通过中间主机使用 python 发送电子邮件