2013-11-22 122 views
0

我有一個標籤格式如下:[AAA]。[BBB]。[CCC等級號碼] +其他一些刺傷在這裏。 例如如何從oracle中的字符串獲取特定數字

'[AAA].[BBB].[CCC Level 11].&[DDD3]' 
'[AAA].[BBB].[CCC Level 1].&[EEE1]' 

我想要得到的數目 水平之後所以上面兩個例子輸出將111分別。 你如何在oracle 11g中做到這一點? 謝謝!

回答

2

您可以使用regexp_substr功能:

SELECT 
    regexp_substr('[AAA].[BBB].[CCC Level 11].&[DDD3]', 'Level ([0-9]*)]', 1, 1, NULL, 1) AS val1, 
    regexp_substr('[AAA].[BBB].[CCC Level 1].&[EEE1]', 'Level ([0-9]*)]', 1, 1, NULL, 1) AS val2 
FROM dual; 

我們匹配的是Level[space]和關閉括號]之間的任何數字。最後一個參數表示您只想提取第一個子組,每個子組由括號定義 - 在這種情況下,我們只有一個子組,即數字。

您需要Oracle 11g用於子組提取,但您已使用標記標記問題,因此這應該適用於您。

輸出:

VAL1 VAL2 
---- ---- 
11 1

如果可能的是,將存在與小數部分的水平,使用該正則表達式,而不是:

'Level ([0-9.]*)]'

Read more about regexp_substr

相關問題