我正在尝试使用3个参数构建函数(在PostgreSQL 9.6.11上):
目标:如果(value-substract)在数组中-> return(value-substract)。 如果没有,我想返回数组中的下一个可用值(下一个位置)
例如,我有这个数组[2010、2009、2008、2007、2006、1999]
如果我的值= 2008且减= 2,则我希望返回2006(数组中为2006)
如果我的值= 2008且减3 = 3,则我期望返回1999(数组中没有2005,下一个可用的值是1999)
现在,我在这里:
CREATE OR REPLACE FUNCTION _fonctions_globales.check_year_exist(liste INT[], value integer, substract integer)
RETURNS integer
LANGUAGE plpgsql
AS $function$
BEGIN
IF EXISTS (SELECT 1 WHERE (value - substract) = ANY(liste)) THEN
return value - substract;
ELSE
return ?;
END IF;
END; $function$
SELECT _fonctions_globales.check_year_exist(array[2010, 2009, 2008, 2007, 2006, 1999], 2008, 3);
需要帮助!
答案 0 :(得分:3)
您可以使用SQL函数来执行此操作,而无需PL / pgSQL:
CREATE OR REPLACE FUNCTION check_year_exist(liste INT[], value integer, substract integer)
RETURNS integer
AS
$function$
select max(v)
from unnest(liste) as t(v)
where t.v <= value - substract;
$function$
LANGUAGE sql;
unnest将所有值作为行返回,where
子句将其限制为小于value - substract
结果的值,然后返回最大数。如果该值与将返回的value - substract
相同,否则倒数第二个。
SELECT check_year_exist(array[2010, 2009, 2008, 2007, 2006, 1999], 2008, 3);
返回1999
SELECT check_year_exist(array[2010, 2009, 2008, 2007, 2006, 1999], 2008, 2);
返回2006