从Oracle中的字符串中提取数字

时间:2013-09-07 05:55:41

标签: regex oracle

我正在尝试从Outlook主题行中提取特定文本。这是计算在SAP中输入的每个订单的周转时间所必需的。我有一个主题行如下

SO# 3032641559 FW: Attached new PO 4500958640- 13563 TYCO  LJ

我的最终输出应该是这样的:3032641559

我已经能够使用像这样的公式在MS excel中执行此操作

=IFERROR(INT(MID([@[Normalized_Subject]],SEARCH(30,[@[Normalized_Subject]]),10)),"Not Found")
上述公式[@[Normalized_Subject]]中的

是存在SO号的列的名称。我已经要求在甲骨文中这样做,但我对此很新。非常感谢您对此的帮助。

注意:在上面的主题行中,数字30在每个主题行中都很常见。

1 个答案:

答案 0 :(得分:2)

REGEXP_SUBSTR()的最后一个参数表示您要选择的子表达式。在这种情况下,你不能只匹配30然后更多的数字,因为第二组数字可能有30。所以,匹配以下更安全,其中x是更多的数字。

SO# 30xxxxxx

作为正则表达式,这变为:

SO#\s30\d+

其中\s表示空格\d表示数字字符,而+表示您想要匹配的字符数。但是,我们可以使用子表达式子串可用;为了做到这一点,你需要有子表达式;即创建要拆分字符串的组:

(SO#\s)(30\d+)

把它放在函数调用中,你就可以了:

regexp_substr(str, '(SO#\s)(30\d+)', 1, 1, 'i', 2)

SQL Fiddle