首页 > 解决方案 > 如何在 Oracle SQL 请求中使用正则表达式

问题描述

我在数据库中有这个复杂的字符串,它表示由分隔符“|”分隔的 4 个元素

1944913|200010|157|4*
1944913|200085|157|1.22*

注意:两行字符串都存在于同一数据库行中。一个单元格中最多可以有 10 行字符串

我想要一个 oracle sql 命令,给定 200010 或 200085,返回它旁边的第一个或第二个元素,例如:

给定 200010,返回 157 或返回 4* 给定 200085,返回 157 或返回 1.22

我该怎么做呢?

标签: sqlregexoracleoracle-sqldeveloper

解决方案


您可以使用 regexp_substr 和 instr 来获得所需的结果:

select a.*,
      CASE WHEN instr(text1,'200085')>0 then REGEXP_SUBSTR (substr(text1,instr(text1,'200085'),500),'[^,|]+', 1, 2) 
          ELSE NULL END as partA,
      CASE WHEN instr(text1,'200085')>0 then REGEXP_SUBSTR (substr(text1,instr(text1,'200085'),500),'[^,|]+', 1, 3) 
          ELSE NULL END as partB
from tableA a

只需将 '200085' 替换为您要查找的字符串,您就可以开始使用了。希望这可以帮助。


推荐阅读