Функция разделения в Denodo не работает! (второй способ) регулярное выражение для сложной строки в Denodo
Я в основном пытаюсь разбить следующую строку в Denodo и пытаюсь создать новые столбцы в базе данных для каждого значения.
my_string = ABLMNC_154342_O_UW_UA-UCOU_SMC
Проблема, с которой я сталкиваюсь, состоит в том, что, когда я разделяю строку, Денодо создает массив. Но после этого нет никакого способа получить доступ к определенному элементу, используя индексы. Например,
split ('_', my_string) дает
op_array[] = [ABLMNC,154342,O,UW,UA-UCOU,SMC]
но я не могу получить доступ к элементам op_array как op_array[0]. Я поднял вопрос в Денодо, но без помощи.
Таким образом, как способ я начал использовать регулярные выражения. На данный момент я могу получить первую строку и цифры.
my_string = ABLMNC_154342_O_UW_UA-UCOU_SMC
регулярное выражение (my_string,'_[0-9]*_[AZ]+_[AZ]+_[AZ]+-[AZ]+_[AZ]+','') = ABLMNC
регулярное выражение (my_string,'[A-Z_-]+',' ') = 154342
Но я не могу найти другие части строки. Буду очень признателен, если кто-нибудь сможет помочь в любом из этих случаев.
1 ответ
Чтобы получить значение внутри массива, используйте (name of the field)[position of the array].<name of the field in the register>
Например:
SELECT (field1_array)[0].string AS f1, (field1_array)[1].string AS f2,
(field1_array)[2].string as f3, (field1_array)[3].string AS f4,
(field1_array)[4].string AS f5, (field1_array)[5].string as f6
FROM (
SELECT split('_', field1) AS field1_array FROM (
-- Subquery with that projects the value you mention. This would usually come from a regular view
SELECT 'ABLMNC_154342_O_UW_UA-UCOU_SMC' AS field1 FROM dual()
)
);
Этот запрос возвращает 6 столбцов со значениями: ABLMNC, 154342, O, UW, UA-UCOU, SMC
Конечно, это решение работает только тогда, когда количество полей в массиве всегда одинаково.