【问题标题】:extract number from string in Oracle从Oracle中的字符串中提取数字
【发布时间】:2013-09-07 16:33:44
【问题描述】:

我正在尝试从 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 在每个主题行中都很常见。

【问题讨论】:

标签: regex oracle


【解决方案1】:

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

【讨论】:

  • @santhosha 。 . .这看起来是正确的答案。如果您同意,您应该接受它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 2015-12-27
  • 2021-01-29
  • 2019-02-20
  • 1970-01-01
  • 2013-01-14
相关资源
最近更新 更多