ORACLE REGEXP_SUBSTR,检索字符之间的值

yr9zkbsy  于 2023-02-15  发布在  Oracle
关注(0)|答案(3)|浏览(151)

我的表中有一些值,其格式与下面类似。我只想检索A-E>> ..... >>之间的数据字符串。(例如,第一次出现>>,因此在下面的情况下,它将是Chubb Fire & Security Pty Ltd - ABN 47000067541
A-E>>Chubb Fire & Security Pty Ltd - ABN 47000067541>>C2004/10539>>My Docs
我试过使用REGEXP_SUBSTR(path,'A-E>>([^.]+)>>',1,1,NULL,1)和其他变量,但它也返回超过>>的值。
你知道我在正则表达式中遗漏了什么吗?

uubf1zoe

uubf1zoe1#

我宁愿建议简单快速的substr + instr组合;提取>> * 符号 * 第一次和第二次出现之间的子字符串。
样本数据:

SQL> with test(col) as
  2    (select 'A-E>>Chubb Fire & Security Pty Ltd - ABN 47000067541>>C2004/10539>>My Docs' from dual)

质询:

3  select substr(col, instr(col, '>>', 1, 1) + 2,
  4                     instr(col, '>>', 1, 2) - instr(col, '>>', 1, 1) - 2
  5               ) result
  6  from test;

RESULT
-----------------------------------------------
Chubb Fire & Security Pty Ltd - ABN 47000067541

SQL>
z31licg0

z31licg02#

您可以在查询中尝试以下正则表达式模式:A-E>>([^.>]+)>>.*$

SELECT 
  REGEXP_SUBSTR(
  'A-E>>Chubb Fire & Security Pty Ltd - ABN 47000067541>>C2004/10539>>My Docs',
  'A-E>>([^.>]+)>>.*$',1,1,NULL,1)
FROM DUAL

请检查演示here

06odsfpq

06odsfpq3#

一个选项是将REGEXP_REPLACE()与捕获组2一起使用,以便提取由以下模式组划分的第二片,例如

SELECT REGEXP_REPLACE(path,'^(.*A-E>>)([^>>]*).*','\2') AS new_path  
  FROM t -- your table

Demo

相关问题