Как разделить строки с помощью двух разделителей в функциях Oracle 11g regexp_substr

У меня есть сомнения, чтобы разделить строку с помощью разделителя.

Первое разделение на основе разделителя выберите те разделенные строки должны быть разделены на основе - разделитель

Моя оригинальная строка: UMC12I-1234,CSM3-123,VQ,Ожидаемый результат:

UMC12I
CSM3
VQ

Каждое значение приходит как значение строки

Я попробовал вариант

WITH fab_sites AS (
  SELECT trim(regexp_substr('UMC12I-1234,CSM3-123,VQ,', '[^,]+', 1, LEVEL)) fab_site
  FROM dual
  CONNECT BY LEVEL <= regexp_count('UMC12I-1234,CSM3-123,VQ,', '[^,]+')+1
)
SELECT fab_site FROM   fab_sites WHERE fab_site IS NOT NULL

- разделены на основе разделителя

Выход:

UMC12I-1234
CSM3-123
VQ

Как я могу получить ожидаемый результат? (нужно снова разделить - разделитель)

2 ответа

Вы можете попробовать этот запрос:

WITH fab_sites AS (
      SELECT TRIM(',' FROM REGEXP_SUBSTR('UMC12I-1234,CSM3-123,VQ,', '(^|,)[^,-]+', 1, LEVEL)) fab_site
        FROM dual
     CONNECT BY LEVEL <= REGEXP_COUNT('UMC12I-1234,CSM3-123,VQ,', '(^|,)[^,-]+')
)
SELECT fab_site
  FROM fab_sites;

Мы начинаем с сопоставления любой подстроки, которая начинается либо с начала всей строки ^ или с запятой ,, разделитель. Затем мы получаем все символы, которые не соответствуют ни запятой, ни тире -, Как только у нас есть эта подстрока, мы удаляем из нее все оставшиеся запятые.

PS Я думаю, что +1 в CONNECT BY пункт посторонний, как и WHERE NOT NULL во "внешнем" запросе.

Вы можете извлечь "слова" до - с regexp_substr с помощью

([^,-]+)(-[^,-]+)?

Шаблон будет соответствовать и захватить в группу 1 один или несколько символов, кроме , а также -, тогда будет соответствовать необязательной последовательности - и 1+ символов кроме ,а также -,

Смотрите демо-версию регулярного выражения.

Использовать этот regex_substr строка вместо вашей с приведенным выше регулярным выражением:

SELECT trim(regexp_substr('UMC12I-1234,CSM3-123,VQ,', '([^,-]+)(-[^,-]+)?', 1, LEVEL, NULL, 1)) fab_site

Посмотреть онлайн демо

Другие вопросы по тегам