【问题标题】:Substring of a string using Oracle (SUBSTRING or REGEXP_SUBSTR)使用 Oracle 的字符串的子字符串(SUBSTRING 或 REGEXP_SUBSTR)
【发布时间】:2021-10-11 10:56:59
【问题描述】:

您好,我正在尝试在 oracle 中获取以下两个字符串的子字符串。如果模式匹配以 S9C 开头并且具有下一个数字

,我想要结果

例如:对于以下两个输入,我需要像这样的输出

输入:

 1.CABLE : THERMINAL 3X2X0.25MM FPCP PLUS UNITRONIC S9C000019651  
 2.Motor Protection Relay EMR-3MPO-2S9CB1-1 (was IQ1000II / MP 3000)
 3.GREASE : BEM 41-132 3KG CARTRIDGE KLUBERPLEX S9C00019171 (Order by KG's required)

输出:

1.S9C000019651
2.Null
3.S9C00019171

【问题讨论】:

  • 我怀疑您的问题没有详细说明它需要的所有细节。例如,您是否希望显示字符串,如果它类似于 ABS9C000019651?这确实包括 S9C000019651 作为子字符串,但在大多数情况下,业务用户不希望选择它。同样在您的示例中,后面有九位数字,您说的是七位。那么,为什么要显示所有九位数字? (我相信你是有原因的,但不是你用英文解释的。)
  • 如果S9C后面跟着七位数字,然后是一个字母怎么办?喜欢 S9C0001234A2?这与您所说的模式匹配(S9C 后跟七位数字),但是您是否希望在输出中显示它? “S9C 后跟七个或更多数字”是否必须是一个完整的 单词,这意味着它必须在其前面并后跟空格、标点符号等(非 WORD 字符)?
  • @mathguy 感谢您的回复。是的,你是对的,我需要字符串 S9C 和下一个数字,无论之后有多少个数字。如果我在 S9C0001234A2 之间收到一封信,那么我需要输出到那个信。希望我现在清楚了。
  • 我的第一个问题怎么样 - 如果输入中有 ABS9C0000112233,输出中需要什么?空值?整个字符串?只是S9C0000112233?还是别的什么?

标签: oracle substring


【解决方案1】:

你可以试试下面的正则表达式-

WITH DATA AS (SELECT 'CABLE : THERMINAL 3X2X0.25MM FPCP PLUS UNITRONIC S9C000019651' STR FROM DUAL
              UNION ALL
              SELECT 'Motor Protection Relay EMR-3MPO-2S9CB1-1 (was IQ1000II / MP 3000)' FROM DUAL
              UNION ALL
              SELECT 'GREASE : BEM 41-132 3KG CARTRIDGE KLUBERPLEX S9C00019171 (Order by KG''s required)' FROM DUAL)
SELECT REGEXP_SUBSTR(STR, 'S9C\d{7,}')
  FROM DATA;

Demo.

【讨论】:

  • 这可能是对还是错 - 这取决于 OP 对我的问题的回答(以 cmets 对他的问题)。我猜你看到了吗?除此之外,您的正则表达式中+ 运算符的用途是什么?
  • @mathguy,如果 OP 更新问题,我会相应地更新我的答案。顺便说一句,+ 意味着选择S9C 之后的所有数字,无论它们是 7 还是 8 或 9 还是 10。
  • + 错误。它的意思是“取加号之前的任何内容,并允许在正则表达式中出现一次或多次”。除了在您的正则表达式中,加号是在另一个量词{7,} 之后,而在另一个量词之后的加号是非法的。 (不确定 Oracle 是如何实现的——如果它抛出错误或者它只是忽略了加号。)“七位或更多位”中的“或更多”部分是您的 {7,} 中的逗号 - 这意味着“七 或更多位数字”而不给出上限。
  • 谢谢@AnkitBajpai
  • @mathguy,你是绝对正确的。我刚刚尝试过并相应地更新了我的答案。
猜你喜欢
  • 1970-01-01
  • 2012-06-26
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2013-07-13
  • 2019-10-26
相关资源
最近更新 更多