Oracle SQL разбивает строку с повторяющимися разделителями - PullRequest
1 голос
/ 07 июня 2019

У меня есть цикл, проходящий через массив, в котором каждое значение необходимо разделить на косую черту (/). У меня есть код, который работает нормально, но если строка имеет более одной косой черты, мой код создает 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 Ответ

1 голос
/ 07 июня 2019

Не похоже, что вам нужны регулярные выражения, если вы хотите разделить только на первое /.Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...