假设我有一个包含results
列的表score
,该列是一个满分的数组:
CREATE TABLE results (
id serial PRIMARY KEY,
scores numeric[]
);
我想更新表格,以便将每个分数四舍五入到小数点后4位。
我创建了一个适用于单个数组值的舍入函数round_numeric_array
:
CREATE OR REPLACE FUNCTION round_numeric_array (numeric[]) RETURNS numeric[]
LANGUAGE SQL
AS $$
SELECT array_agg(round(unnest($1), 4))
$$;
但是如何将它应用于表中的每个值?我一直在尝试
UPDATE results SET scores = round_numeric_array(scores)
但我收到set-valued function called in context that cannot accept a set
错误。有什么想法吗?
答案 0 :(得分:1)
将unnest()
函数放在FROM子句中:
CREATE OR REPLACE FUNCTION round_numeric_array (numeric[])
RETURNS numeric[]
LANGUAGE SQL
AS $$
SELECT array_agg(round(arr, 4))
FROM unnest($1) as arr;
$$;