在sql oracle中选择括号之间的值

托马斯

这里有很多例子,例如使用正则表达式如何检索括号之间的文本,但我还没有找到一个可以用多级括号来做到这一点的例子。

例如,我有文字:

{AB}{C}{DEF{XX}}

我想得到如下结果:

AB
C
DEF{XX}
XX

或者第二个选项,这对我来说也很好,不返回包含其他括号的文本,即:

AB
C
XX

这里是一个使用正则表达式的标准查询,适用于单级括号:

SELECT REGEXP_SUBSTR('{AB}{C}{DEF}', '{(.*?)}', 1, level, NULL, 1) AS str
FROM dual
CONNECT BY LEVEL <= REGEXP_COUNT('{AB}{C}{DEF}', '{(.*?)}');

结果:

AB
C
DEF

此正则表达式不适用于文本 {AB}{C}{DEF{XX}},其结果将是:

AB
C
DEF{XX
肯德尔

此示例仅返回最里面的花括号组的内容。允许除&[{}]+之外的任意数量的任何字符感谢@MT0 对模式的更正。(删除了反斜杠,因为我们不需要在类中转义花括号。){}

SELECT REGEXP_SUBSTR('{AB}{C}{DEF}{HI{JKL}}', '{([^{}]+)}', 1, level, NULL, 1) AS str
FROM dual
CONNECT BY LEVEL <= REGEXP_COUNT('{AB}{C}{DEF}{HI{JKL}}', '{(.*?)}');
| 字符串 |
| :-- |
| AB |
| C |
| 防御工事 |
| JKL |

db<>在这里摆弄

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章