使用 regexp_substr 在 oracle 查询中拆分字符串

Split the string in oracle query using regexp_substr

我有一个像 R09801E_ZJDE0001 这样的字符串。我可以使用下面的 systax

拆分字符串的第一部分,即 _ (R09801E) 之前的部分
regexp_substr('R09801E_ZJDE0001', '[^_]+', 1, 1)

任何人都可以建议如何在 _ (ZJDE0001) 之后获取字符串的第二部分吗?

您实际上可以使用基本字符串函数执行此操作:

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

Demo

我建议这种方法的原因是,将 SUBSTRINSTR 结合使用可能会优于基于正则表达式的解决方案。

如果你真的想使用正则表达式方法,那么我建议使用 REGEXP_REPLACE:

SELECT REGEXP_REPLACE('R09801E_ZJDE0001', '.*_', '') AS second_part
FROM dual;

这将去掉下划线之前的所有内容,包括下划线,剩下第二部分。