2017-08-09 120 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]應用於已經不存在的結果集,而不是數組。