Oracle SQL - 删除前导图案子字符串

时间:2017-11-09 13:38:24

标签: sql regex oracle

我在Oracle 12cR1数据库中有一个数据字段。该字段是产品描述符,字段的开头包含产品ID。然后是产品名称。我需要剥离产品ID。产品ID可以采用以下两种格式之一......数据通常类似于以下内容之一:

  • 0P3H - Opus NEM
  • 0P22 - 40021 - 订单捕获自助服务

请注意,在某些情况下,“ - ”字符是产品名称的一部分,例如

  • 0C34 - 人力资源 - 促销模块

据我所知,我需要删除以下当它开始时......

  • 4个字符然后空格然后破折号然后空格
  • 4个字符然后空格然后破折号然后空格5个字符空格破折号 空间

如何编写Oracle SQL来读取字段并删除这两个不同的子字符串?

谢谢!

2 个答案:

答案 0 :(得分:1)

根据您的说明,case可能是最简单的:

select (case when field like '____ - _____ -%' then substr(field, 15)
             else substr(field, 7)
        end)

答案 1 :(得分:0)

与第一个' - '相反的子串,然后从该起始位置开始子串到字符串的结尾。

select TRIM(substr('0P3H - Opus NEM', instr('0P3H - Opus NEM', '-', -1, 1) + 1)) from dual

select TRIM(substr('0P22 - 40021 - Order Capture Self Service', instr('0P22 - 40021 - Order Capture Self Service', '-', -1, 1) + 1)) from dual