从 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]
应用于已经取消嵌套的结果集,而不是数组。
我想在取消嵌套数组之前访问数组 "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]
应用于已经取消嵌套的结果集,而不是数组。