我有一个来自Oracle树层次结构的以下示例数据(见下文),特别是使用default
假设我使用典型的oracle树查询,即:
SYS_CONNECT_BY_PATH(link_id, '/') as Path
数据样本是:
SELECT link_id, SYS_CONNECT_BY_PATH(link_id, '/') "Path"
FROM my_table
START WITH parent_link_id = 'L1'
CONNECT BY PRIOR link_id = parent_link_id;
现在,我不确定该怎么办,使用路径示例数据,我需要一种从底部向上反向遍历我的路径数据的方法,以确定并返回该链接id的第一个“Q”起始字符串,这是该链接ID的父级。
例如:
L1 /LINK-A/QWERTY/QEDED1SA/AAAA|BBBB|CCCC/XX|YY|ZZ/L1
L2 /LINK-B/QETRYAB/QWERTY/L2
我实际上希望将此父“Q”字符串值作为我的树查询路径的一部分检索为“Path”之后的另一列
基本上将该链接的树路径分支,直到您点击以字母“Q”开头的父级并单独返回整个值。
答案 0 :(得分:1)
您可以将此表达式用于其他列:
regexp_substr(SYS_CONNECT_BY_PATH(link_id, '/'), '/(Q[^/]*)(/[^Q]|[^/])*$', 1, 1, '', 1)
它在SYS_CONNECT_BY_PATH(link_id, '/')
中找到以Q
开头的最后一个零件。
参数1, 1, ''
只是这些参数的默认值,但它们是提供的,以便可以指定最后一个参数。该论点表示不返回整个匹配,而只返回第一个捕获组,即Q[^/]*
匹配的任何内容。正则表达式中的所有其余部分用于确保没有其他此类部分跟随它。