PostgreSQL PL/pgSQL数组最大值函数调用报错问题求助
解决PL/pgSQL数组求最大日期函数报错问题
错误原因
函数中SELECT max(x) into max_date_time FROM dates_array as x;这行代码存在问题:dates_array是传入的数组参数,不是数据库中的表,但PostgreSQL会将其识别为表名去查找,因此抛出relation "dates_array" does not exist的错误。要处理数组内的元素,需要先用unnest()函数将数组展开为行数据。
修正后的PL/pgSQL函数
CREATE OR REPLACE FUNCTION arcfm.array_max_date(in dates_array timestamp[]) RETURNS timestamp LANGUAGE plpgsql AS $$ declare max_date_time timestamp; BEGIN SELECT max(x) into max_date_time FROM unnest(dates_array) as x; return max_date_time; END; $$ ;
更简洁的SQL函数版本
如果逻辑简单,直接用SQL函数替代PL/pgSQL会更高效:
CREATE OR REPLACE FUNCTION arcfm.array_max_date(in dates_array timestamp[]) RETURNS timestamp LANGUAGE sql AS $$ SELECT max(x) FROM unnest(dates_array) as x; $$ ;
验证调用
你的调用语句是正确的,执行后会返回数组中的最大日期:
select 1, arcfm.array_max_date('{2022-02-03, 2022-06-05}'::timestamp[]) as max_date_time;
返回结果示例:
| ?column? | max_date_time |
|---|---|
| 1 | 2022-06-05 00:00:00 |
内容的提问来源于stack exchange,提问作者DevMhd
相关产品推荐
相关产品推荐

