【问题标题】:Substring of a string using Oracle (SUBSTRING or REGEXP_SUBSTR) When there is multiple Matches一个字符串的子串使用Oracle(SUBSTRING或REGEXP_SUBSTR)当有多个Matches时
【发布时间】:2021-08-23 12:14:43
【问题描述】:

您好,我正在尝试在 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)
 4.DO NOT USE CARRIER SPIDEX ZK 38 98 SH. S9C00011593 (SUPERSEDE BY S9C10204555 - WIN0020775)

输出:

1.S9C000019651
2.Null
3.S9C00019171
4.S9C10204555

否则更好的方法是从文本后面获取第一个匹配的字符串。

【问题讨论】:

    标签: oracle regexp-substr


    【解决方案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
                  UNION ALL
                  SELECT 'DO NOT USE CARRIER SPIDEX ZK 38 98 SH. S9C00011593 (SUPERSEDE BY S9C10204555 - WIN0020775)' FROM DUAL)
    SELECT NVL(REGEXP_SUBSTR(STR, 'S9C\d{7,}', 1, 2), REGEXP_SUBSTR(STR, 'S9C\d{7,}'))
      FROM DATA;
    

    Demo.

    【讨论】:

    • 如果我需要匹配A9B 之后的 8 位数字,否则为 Null
    • 只有 8 位或至少 8 位?
    • 8后只有8位
    • 那你可以试试 REGEXP_SUBSTR(STR, 'S9C\d{8,8}')
    • 不,它不起作用。其数字小于8的淘汰记录
    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 2012-06-26
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多