2017-08-09 70 views
0

我想UNNESTing阵列之前访问的数组“成分”第一5个元素第一N数组元素:获得从UNNEST + string_to_array功能

SELECT 
    TRIM 
    (REGEXP_REPLACE 
     (UNNEST 
      (string_to_array(ingredients, ';'))[1:5], '\S+\%|\s+\(.*?\)','','g')) 
FROM products 

的“成分”阵列可以包含值,诸如:

{'1%', 'abc(2%)', 'abcd', ... , N th element} 

下面的代码工作正常,但我不知道上面的代码有什么问题。

SELECT (string_to_array('1,2,3,4',','))[1:3] 

回答

0

这工作:

select 
    trim(
    regexp_replace(
     unnest(
     (string_to_array(ingredients, ';'))[1:5] 
    ), 
     '\S+\%|\s+\(.*?\)', 
     '', 
     'g' 
    ) 
) 
from products; 

你的例子显示的是如何重要的是保持良好的格式化/压痕。

以下是一样的,你写的东西,但重新格式化(左括号旁边是函数本身,关闭一个是相同的缩进水平,任何东西里面缩进更多):

SELECT 
    TRIM(
     REGEXP_REPLACE(
      UNNEST(
       string_to_array(ingredients, ';') 
      )[1:5], 
      '\S+\%|\s+\(.*?\)', 
      '', 
      'g' 
     ) 
    ) 
FROM products 

- 这个错误是显而易见的,你试图将[1:5]应用于已经不存在的结果集,而不是数组。