从 unnest + string_to_array 函数中获取前 N 个数组元素

Get first N array elements from unnest + string_to_array function

我想在取消嵌套数组之前访问数组 "ingredients" 的前 5 个元素:

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

"Ingredients" 数组可能包含以下值:

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

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

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

这个有效:

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

你的例子表明保持良好状态的重要性formatting/indentation。

下面和你写的一样,只是重新格式化了(左括号在函数本身旁边,右括号在同一缩进级别,里面的任何东西都缩进更多):

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

-- 错误很明显,您正在尝试将 [1:5] 应用于已经取消嵌套的结果集,而不是数组。