Разбить значение столбца на динамические столбцы - PullRequest
0 голосов
/ 02 марта 2019

У меня есть таблица table1 со следующим столбцом:

file_name
dqID.AB_RES_ZEST_H2O_XYZ.LKG774548_00035_CAB_TS_HEST_H99_WED_45430098138.txt_154853452388.txt.xml
dqID.AB_RES_ZEST_H2O_XYZ.LKG744348_022335_CAB_TS_HEST_H99_WED_445438138.txt_15344452388.txt.xml
dqID.AB_RES_ZEST_H2O_XYZ.LKG774548_000435_CAB_TS_HEST_H99_WED_45345138.txt_15485343458.txt.xml

Я ищу, чтобы создать динамическое число столбцов на основе значений и разделить, используя _ и.

Таким образом, результат будет:

file_name                                                                                                  part1    part2   part3   part4......
dqID.AB_RES_ZEST_H2O_XYZ.LKG774548_00035_CAB_TS_HEST_H99_WED_45430098138.txt_154853452388.txt.xml           dqID     AB     RES   ZEST....
dqID.AB_RES_ZEST_H2O_XYZ.LKG744348_022335_CAB_TS_HEST_H99_WED_445438138.txt_15344452388.txt.xml             dqID     AB     RES   ZEST....
dqID.AB_RES_ZEST_H2O_XYZ.LKG774548_000435_CAB_TS_HEST_H99_WED_45345138.txt_15485343458.txt.xml              dqID     AB     RES   ZEST....

В любом случае в Oracle SQL есть возможность разбить текст на несколько частей, используя 2 _ и .

Кроме того, динамически создайте столбцы детали?Поскольку строка может содержать либо _ & ., либо очень мало _ & .

1 Ответ

0 голосов
/ 02 марта 2019

Как прокомментировано, SQL-запрос должен возвращать фиксированный набор столбцов, поэтому динамическая часть не может быть выполнена в чистом SQL.

Вот решение, которое использует REGEXP_SUBSTR() дляразбить строку на фиксированное количество столбцов:

SELECT
    file_name,
    REGEXP_SUBSTR(file_name, '[^._]+', 1, 1) as part1,
    REGEXP_SUBSTR(file_name, '[^._]+', 1, 2) as part2,
    REGEXP_SUBSTR(file_name, '[^._]+', 1, 3) as part3
FROM table1

Вы можете добавить столько столбцов, сколько необходимо в наборе результатов.

Объяснение регулярного выражения:

[             # any character
    ^         #     other than
        .     #         a dot
        _     #         or an underscore
]             #
+             # occuring at least once

Итакв основном это будет захватывать строковые части между разделителями . и _.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...