【问题标题】:Split a string based on hyphen根据连字符拆分字符串
【发布时间】:2017-02-04 07:19:09
【问题描述】:

我有一个这样的字符串

XX0099-X01

我想根据连字符将字符串分成两部分,即 XX0099X01

我试过了

SELECT 'XX0099-X01',
           SUBSTR('XX0099-X01',
                  1,
                  INSTR('XX0099-X01',
                        '-',
                        1
                        ) -1
                  )
    FROM   dual

不知道如何获得第二部分。

我们有一个旧系统,仍在使用 8i Oracle 数据库。

【问题讨论】:

    标签: sql oracle split oracle8i


    【解决方案1】:

    使用substrinstr 的组合:

    select 
      substr(s, 1, instr(s, '-') - 1),
      substr(s, instr(s, '-') + 1)
    from t;
    

    如果支持,另一种方法是使用regexp_substr

    select 
      regexp_substr('XX0099-X01','[^-]+', 1, 1),
      regexp_substr('XX0099-X01','[^-]+', 1, 2)
    from dual;
    

    【讨论】:

    • 我们有一个旧的遗留系统仍在使用 8i Oracle 数据库,以上在 8i 中不起作用。谢谢
    • 非常感谢,非常感谢。
    • 在大多数情况下,“旧版本”(使用标准字符串函数)也可能比正则表达式解决方案更快。一般来说,只有在不存在具有标准字符串函数的解决方案时(或者如果唯一的此类解决方案过于复杂和繁琐,变得难以管理/维护),才应使用正则表达式。
    【解决方案2】:

    如果您不能使用正则表达式子字符串/替换,这里有一个使用 Oracle 基本字符串函数的选项:

    SELECT SUBSTR(col, 1, INSTR(col, '-') - 1) AS first_part,
           SUBSTR(col, INSTR(col, '-') + 1)    AS second_part
    FROM yourTable
    

    【讨论】:

    • 非常感谢,非常感谢。