0

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

SO# 3032641559 FW:附加新 PO 4500958640-13563 TYCO LJ

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

我已经能够用这样的公式在 MS excel 中做到这一点

=IFERROR(INT(MID([@[Normalized_Subject]],SEARCH(30,[@[Normalized_Subject]]),10)),"Not Found")

上式[@[Normalized_Subject]]中为 SO 编号所在列的名称。我已要求在 oracle 中执行此操作,但我对此很陌生。您对此的帮助将不胜感激。

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

4

1 回答 1

2

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

SO# 30xxxxxx

作为一个正则表达式,它变成:

SO#\s30\d+

where\s表示空格\d表示数字字符,而+要匹配的字符数尽可能多。但是,我们可以使用可用的子表达式子串;为此,您需要有子表达式;即创建要拆分字符串的组:

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

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

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

SQL小提琴

于 2013-09-07T08:31:43.157 回答