将时间戳数组参数发送到PostgreSQL函数



我开发了一个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;

相关内容

  • 没有找到相关文章

最新更新