【问题标题】:Oracle SQL - Query to select string between curly BracketsOracle SQL - 查询以选择大括号之间的字符串
【发布时间】:2022-08-03 17:07:59
【问题描述】:

我正在寻找一个查询来选择花括号之间的字符串,我可以在 Oracle SQL 或 PL/SQL 中使用。

这是一个可以使用的示例 TABLE1:

ID LIST
1 Depto:={x1,x2} Code:={house}
2 Depto:={y1,x1} Code:={house,garden}
3 Depto:={x1,x2} Code:={house} Depto:={x3,x4}
4 Code:={house,garden} Depto:={y1,x1}

预期结果:
ID LIST DEPTO CODE
1 Depto:={x1,x2} Code:={house} x1:x2 house
2 Depto:={y1,x1} Code:={house,garden} y1:x1 house:garden
3 Depto:={x1,x2} Code:={house} Depto:={x3,x4} x1:x2:x3:x4 house
4 Code:={house,garden} Depto:={y1,x1} y1:x1 house:garden

我试过这个查询:

SELECT id, list, regexp_substr(list, \'\\Depto:={([^}]+)\\}\', 1,1,NULL,1) AS Depto, regexp_substr(list, \'\\Code:={([^}]+)\\}\', 1,1,NULL,1) AS Code FROM table1

但是通过这个查询,我只提取了第一个字符串。

谢谢。

    标签: sql oracle regexp-substr


    【解决方案1】:

    您可能需要转义正则表达式中的元字符。考虑这个版本:

    SELECT id, list,
           REGEXP_SUBSTR(list, 'Depto:=\{(.*?)\}', 1, 1, NULL, 1) AS Depto,
           REGEXP_SUBSTR(list, 'Code:=\{(.*?)\}', 1, 1, NULL, 1) AS Code
    FROM table1
    

    【讨论】:

      猜你喜欢
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多