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



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

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]

这有效:

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]应用于已经未嵌套的结果集,而不是数组。

最新更新