Regex 正则表达式clob字段

Regex 正则表达式clob字段,regex,oracle,select,oracle10g,Regex,Oracle,Select,Oracle10g,我有一个关于Oracle10中正则表达式的问题 假设我有一个像123456这样的值;12345;454545存储在clob字段中,是否有办法通过正则表达式仅对第二个模式(12345)进行过滤,知道该值可以超过5位,但始终出现在第一个分号之后,并且始终在末尾有一个尾随分号 非常感谢你在这件事上的支持 祝您有愉快的一天,此查询将为您提供所需的输出 SELECT REGEXP_REPLACE(REGEXP_SUBSTR('123456;12345;454545;45634',';[0-9]+;'),'

我有一个关于Oracle10中正则表达式的问题

假设我有一个像123456这样的值;12345;454545存储在clob字段中,是否有办法通过正则表达式仅对第二个模式(12345)进行过滤,知道该值可以超过5位,但始终出现在第一个分号之后,并且始终在末尾有一个尾随分号

非常感谢你在这件事上的支持


祝您有愉快的一天,

此查询将为您提供所需的输出

SELECT REGEXP_REPLACE(REGEXP_SUBSTR('123456;12345;454545;45634',';[0-9]+;'),';')
FROM dual;

您可以使用此查询获取任何模式的过滤器,只需将2更改为任何值,但它应小于或等于字符串中的元素数

with tab(value) as
(select '123456;12345;454545' from dual)
select regexp_substr(value, '[^;]+', 1, 2) from tab;
只需一个电话即可轻松完成:

select regexp_replace('123456;12345;454545','^[0-9]+;([0-9]+);.*$','\1')
from dual;

也许,可以用更美观的方式或您的业务逻辑修改regexp表达式,但我认为,这个想法很清楚。

您的输入模式总是有三个数字吗?比如用两个分号分隔的三个数字?或者,您的输入模式可以有无限数量的数字,这些数字之间用分号分隔,您需要第二个数字。或者,数字的出现次数不限,后面有分号。感谢您的发布。+1但是:A)可以选择修改
[0-9]*
,而不是
[0-9]+
,以检测空值。B) 可以使用
replace
而不是
regexp\u replace
来提高一点速度。
select regexp_replace(regexp_substr(Col_name,';\d+;'),';','') from your_table;