我开发了一个pgplsql函数来接收日期数组,返回最大日期,但它无法调用函数:
select 1, arcfm.array_max_date('{2022-02-03, 2022-06-05}'::timestamp[]) as max_date_time;
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 dates_array as x;
return max_date_time;
END;
$$
;
尝试过的呼叫,如:选择1,arcfm.array_max_date("{2022-03,2022-06-05}"::timestamp[](作为max_date_time;
并期望最大日期,但它给出了呼叫错误
SQL错误[42P01]:错误:关系;dates_array";不存在其中:PL/pgSQL函数array_max_date(不带时区的时间戳[](SQL语句第5行
您可以使用unnest()
将数组转换为一组行,然后使用max()
获得最大值:
select max(x)
from unnest('{2022-02-03, 2022-06-05}'::timestamp[]) as x;
Fastnlight建议的更好的答案是使用名为"最伟大的">
SELECT GREATEST('2022-02-03'::timestamp, '2022-06-05'::timestamp);
Adrian Klaver的解释也解决了我的功能问题:
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;
$$
;
select 1, arcfm.array_max_date('{2022-02-03, 2022-06-05}'::timestamp[]) as max_date_time;