Postgres 中是否有任何方法可以将函数应用于数组(或任何类型的集合)的结果?
例如,如果我有一个create function add1...
将数字加一的函数,有什么办法可以做到:
select map add1 array[1,5,8...];
Run Code Online (Sandbox Code Playgroud)
回来
array [2,6,9...]
Run Code Online (Sandbox Code Playgroud)
?
我不确定它是否对 a 有任何意义,select
因为它可以直接将函数映射到单个结果上:
select add1(x) from X;
Run Code Online (Sandbox Code Playgroud)
另外,这里有懒惰的概念吗?所有功能都将“严格”应用?
如果您只是想增加输入数组的每个元素,这个简单的函数是实现此目的的一种方法。
CREATE OR REPLACE FUNCTION add1 (int[]) RETURNS int[] AS
$func$
DECLARE
e int;
new_arr int[] := '{}';
BEGIN
FOREACH e IN ARRAY $1 LOOP
e := e + 1;
new_arr := new_arr || e;
END LOOP;
RETURN new_arr;
END;
$func$ LANGUAGE plpgsql STABLE;
SELECT add1(array[1,5,8,15]::int[]);
add1
------------
{2,6,9,16}
Run Code Online (Sandbox Code Playgroud)
或者从您的表中查询
select id, array_col, add1(array_col) from yourtable;
id | arr | add1
----+---------------+---------------
1 | {1,3,6,9} | {2,4,7,10}
2 | {10,20,30,40} | {11,21,31,41}
Run Code Online (Sandbox Code Playgroud)
该函数的纯 SQL 版本:
CREATE OR REPLACE FUNCTION add1(int[]) RETURNS int[] AS
$func$
SELECT array_agg(vals)
FROM (select unnest($1) + 1 as vals) AS x;
$func$ LANGUAGE sql STABLE;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5883 次 |
最近记录: |