Oracle Regexp 根据第一次出现的分隔符拆分字符串

Posted

技术标签:

【中文标题】Oracle Regexp 根据第一次出现的分隔符拆分字符串【英文标题】:Oracle Regexp to split string based on first occurrence of delimiter 【发布时间】:2019-06-28 10:44:09 【问题描述】:

我有以下数据

1241 - ASGEF - AFZHE
1242 - ASGEF1
1243 - UJHAHAHG - AGHBNG

使用 oracle regexpr 的预期输出

ASGEF - AFZHE
ASGEF1
UJHAHAHG - AGHBNG

【问题讨论】:

【参考方案1】:

SUBSTR + INSTR 可能会运行得更快(即不需要正则表达式)。 result 显示了这一点,而 result_2 显示了一个正则表达式选项。

SQL> with test (col) as
  2    (select '1241 - ASGEF - AFZHE'     from dual union all
  3     select '1242 - ASGEF1'            from dual union all
  4     select '1243 - UJHAHAHG - AGHBNG' from dual
  5    )
  6  select col,
  7         trim(substr(col, instr(col, '-') + 1)) result,
  8         ltrim(regexp_substr(col, '-.+'), '- ') result_2
  9  from test;

COL                      RESULT                   RESULT_2
------------------------ ------------------------ ------------------------
1241 - ASGEF - AFZHE     ASGEF - AFZHE            ASGEF - AFZHE
1242 - ASGEF1            ASGEF1                   ASGEF1
1243 - UJHAHAHG - AGHBNG UJHAHAHG - AGHBNG        UJHAHAHG - AGHBNG

SQL>

【讨论】:

以上是关于Oracle Regexp 根据第一次出现的分隔符拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

Oracle、Regexp、用分号分隔的字符串

使用 regexp_substr 在 Oracle 中按空格和字符拆分字符串作为分隔符

oracle 字段比例拆分

Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]

Oracle REGEXP_SUBSTR |获取两个分隔符之间的字符串

Oracle字段根据逗号分割查询数据