2013-11-22 118 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

相关问题