Oracle SQL使用重复的定界符分割字符串

时间:2019-06-07 15:57:35

标签: sql regex oracle

我有一个遍历数组的循环,其中每个值都需要在正斜杠(/)上拆分。我有一个可以正常工作的代码,但是如果一个字符串包含多个正斜杠,我的代码将创建3个子字符串,而不是2个:

xxx/xx/x

成为

xxx
xx
x

我需要

xxx
xx/x

这是我的代码:

SELECT REGEXP_SUBSTR(arr(i),'[^/]+', 1, level) BULK COLLECT 
    INTO sub_array
    FROM dual
    CONNECT BY REGEXP_SUBSTR(arr(i), '[^/]+', 1, level)
    IS NOT NULL;

有人可以帮忙吗?

我尝试将发生参数更改为“ 1”,但没有任何区别:

SELECT REGEXP_SUBSTR(arr(i),'[^/]+', 1, 1) BULK COLLECT 
    INTO sub_array
    FROM dual
    CONNECT BY REGEXP_SUBSTR(arr(i), '[^/]+', 1, 1)
    IS NOT NULL;

1 个答案:

答案 0 :(得分:1)

如果只想在第一个/上分割,这听起来好像不需要任何正则表达式。您可以使用INSTR轻松找到第一个/字符的位置,然后使用SUBSTR拆分该位置。

WITH test_input AS (
    SELECT 'xxx/xx/x' AS val
    FROM dual
)

SELECT t.val                                AS original_string,
       INSTR(t.val,'/',1)                   AS position_of_first_slash,
       SUBSTR(t.val,0,INSTR(t.val,'/',1)-1) AS substring_before_first_slash,
       SUBSTR(t.val,INSTR(t.val,'/',1)+1)   AS substring_after_first_slash
FROM test_input t