2016-09-28 1 views
1

Я в основном пытаюсь разбить следующую строку в Denodo и попытаться создать новые столбцы в базе данных для каждого значения.Функция разделения в Denodo не работает! (второй путь) Regex для сложной строки в Denodo

my_string = ABLMNC_154342_O_UW_UA-UCOU_SMC ​​

Проблема я столкнулся, когда я разделить строку, Denodo создает массив. Но после этого нет способа получить доступ к определенному элементу с помощью индексов. Например,

сплит ('_', my_string) дает

op_array [] = [ABLMNC, 154342, О, UW, UA-UCOU, SMC]

но я не может обращаться к элементам op_array как op_array [0]. Я поднял вопрос в Denodo, но не помог.

Итак, в качестве пути я начал использовать регулярное выражение. На данный момент я могу получить первую строку и числа.

my_string = ABLMNC_154342_O_UW_UA-UCOU_SMC ​​

регулярное выражение (my_string, "_ [0-9] * _ [AZ] + _ [AZ] + _ [AZ] + - [AZ] + _ [AZ ] + ' '') = ABLMNC

регулярное выражение (my_string, '[A-Z _-] +',' «) = 154342

Но я не могу найти другие части строки , Я был бы очень благодарен, если бы кто-то мог помочь в любом из этих случаев.

+0

Попробуйте 'regexp (my_string, '[^ _] +', '')' –

+0

Спасибо Wiktor. Но это дает мне строку, подобную этой ABLMNC154342OUWUA-UCOUSMC. Так что это фактически не решает проблему. Я извлекаю его из столбца, а затем пытаюсь разбить его на несколько столбцов. – ashubhargave

ответ

2

Чтобы получить значение внутри массива используют (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, О, UW, UA-UCOU, SMC

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

+0

Большое спасибо за помощь MonteCarlo. – ashubhargave