如何舍入Postgres中数组列中的每个数组元素?

时间:2017-10-31 18:52:42

标签: sql postgresql

假设我有一个包含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错误。有什么想法吗?

1 个答案:

答案 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;
$$;