我有一个遍历数组的循环,其中每个值都需要在正斜杠(/
)上拆分。我有一个可以正常工作的代码,但是如果一个字符串包含多个正斜杠,我的代码将创建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;
答案 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