1

我基本上是尝试在 Denodo 中拆分以下字符串,并尝试在数据库中为每个值创建新列。

my_string = ABLMNC_154342_O_UW_UA-UCOU_SMC

我面临的问题是当我拆分字符串时,Denodo 创建了一个数组。但在那之后,就无法使用索引访问特定元素。例如,

split('_',my_string) 给出一个

op_array[] = [ABLMNC,154342,O,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

但我无法找到字符串的其他部分。如果有人可以在任何这些情况下提供帮助,我将不胜感激。

4

1 回答 1

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、O、UW、UA-UCOU、SMC

当然,这种解决方案只有在数组中的字段数始终相同时才有效。

于 2016-09-30T07:43:22.547 回答