在Oracle SQL/PLSQL中使用regex_substr获取其他数字之间的特定数字[重复]

w1jd8yoj  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(145)

此问题已在此处有答案

Oracle - need to extract text between given strings(4个答案)
Oracle SQL: Getting text between two sentences(1个答案)
上个月关门了。
我有这个字符串'013654127411422599412405412123AB>Z4204015479'.我需要99(可能是10)和>之间的所有数字。
我试着得到这个:

regexp_substr('013654127411422599412405412123AB>Z4204015479','[^99|10](.)([^(>)]+)')

但它不工作。结果是:

3654127411422599412405412123AB

预期结果:
412405412123AB
有人能帮帮我吗?

4dc9hkyq

4dc9hkyq1#

您可以使用

SELECT regexp_substr(
  '013654127411422599412405412123AB>Z4204015479',
  '(99|10)(\w+)>', 1, 1, NULL, 2) AS Result;

此外,如果可以有多个字符,只需使用

'(99|10)([^>]+)'

(99|10)(\w+)>正则表达式匹配9910并将其捕获到Group 1中,然后将任何一个或多个单词字符捕获到Group 2中,后跟一个>字符。
(99|10)([^>]+)正则表达式更通用一些,它匹配并捕获到第2组9910中,然后捕获到第2组中除>之外的任何一个或多个字符。
注意regexp_substr中的2参数,它提取存储在组2中的值。

yv5phkfx

yv5phkfx2#

必须是regex吗?因为,在大型数据集上,substr + instr组合很可能会优于它,而且相当微不足道。
样本数据(下划线部分代表预期结果):

SQL> with test (col) as
  2    (select  '013654127411422599412405412123AB>Z4204015479' from dual)
  3    --                          --------------

查询方式:

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

RESULT
--------------
412405412123AB

SQL>

相关问题