2014-01-10 49 views
0

我有预言10.正则表达式CLOB字段

涉及一种正则表达式的一个问题假设我有一个像123456的值; 12345;存储在CLOB字段454545,是否有通过正则表达式的方式只在第二个模式(12345)上过滤,知道该值可能超过5位数,但始终在第一个分号后出现,并始终在尾部有尾随分号?

非常感谢在这个问题上的支持,

有一个愉快的一天,

+0

您的输入模式总是会有三个数字吗?在三个用两个分号隔开的数字中?或者你的输入模式可以有无限数量的以分号分隔的数字,而你想要第二个数字。 – Incognito

+0

无限数量的尾随分号。感谢发布。 – user1814129

回答

1

该查询应该给你你想要的输出。

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

非常感谢。 – user1814129

+0

+1但是:A)可以选择修改'[0-9] *'而不是'[0-9] +'来检测空值。 B)可以使用'replace'替代'regexp_replace'来加快速度。 – ThinkJet

0

你可以使用此查询只是改变2为任意值过滤任何模式,但应该由一个呼叫字符串中小于或等于元素的数目

with tab(value) as 
(select '123456;12345;454545' from dual) 
select regexp_substr(value, '[^;]+', 1, 2) from tab; 
0

容易:

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

也许,正则表达式表达式可以在比较好看或业务逻辑的方式修改,但这个想法,我想,是明确的。

0
select regexp_replace(regexp_substr(Col_name,';\d+;'),';','') from your_table; 
+0

http://sqlfiddle.com/#!4/869cb/10 – Sai