Функция разделения в 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

Конечно, это решение работает только тогда, когда количество полей в массиве всегда одинаково.

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