2014-01-10 55 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