提问人:user22553365 提问时间:9/14/2023 最后编辑:Ryszard Czechuser22553365 更新时间:10/20/2023 访问量:51
在oracle SQL/PLSQL中用regex_substr获取其他数字之间的特定数字
get a specific number between others numbers with regex_substr in oracle SQL/PLSQL
问:
我有这个字符串'013654127411422599412405412123AB>Z4204015479'。我需要介于(可能是 10)和 之间的所有数字。99
>
我试着用以下方法得到这个:
regexp_substr('013654127411422599412405412123AB>Z4204015479','[^99|10](.)([^(>)]+)')
但它不起作用。结果是:
3654127411422599412405412123AB
预期结果:
412405412123AB
有人可以帮我吗?
答:
1赞
Wiktor Stribiżew
9/14/2023
#1
你可以使用
SELECT regexp_substr(
'013654127411422599412405412123AB>Z4204015479',
'(99|10)(\w+)>', 1, 1, NULL, 2) AS Result;
此外,如果可以有多个单词字符,只需使用
'(99|10)([^>]+)'
正则表达式匹配并捕获到第 1 组中,然后将任何一个或多个单词字符捕获到第 2 组中,后跟字符。(99|10)(\w+)>
99
10
>
正则表达式更通用一些,它匹配并捕获到组 2 中,然后捕获到组 2 中,而不是 。(99|10)([^>]+)
99
10
>
请注意 中的参数,它提取存储在组 2 中的值。2
regexp_substr
0赞
Littlefoot
9/14/2023
#2
它必须是正则表达式吗?因为,在大型数据集上,组合很可能会胜过它,而且相当微不足道。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>
评论
<
99
<
99
99
<
99
>