使用 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;
我建议这种方法的原因是,将 SUBSTR
与 INSTR
结合使用可能会优于基于正则表达式的解决方案。
如果你真的想使用正则表达式方法,那么我建议使用 REGEXP_REPLACE
:
SELECT REGEXP_REPLACE('R09801E_ZJDE0001', '.*_', '') AS second_part
FROM dual;
这将去掉下划线之前的所有内容,包括下划线,剩下第二部分。
我有一个像 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;
我建议这种方法的原因是,将 SUBSTR
与 INSTR
结合使用可能会优于基于正则表达式的解决方案。
如果你真的想使用正则表达式方法,那么我建议使用 REGEXP_REPLACE
:
SELECT REGEXP_REPLACE('R09801E_ZJDE0001', '.*_', '') AS second_part
FROM dual;
这将去掉下划线之前的所有内容,包括下划线,剩下第二部分。