Essayez :
date_part('year',age(coalesce(d1,current_date), d2))::int;
age(d1,d2)
renvoie le nombre d'années, de mois et de jours entre deux dates au format suivant :
xxx year(s) xxx mon(s) xxx day(s).
à partir de cette sortie en utilisant date_part()
pour choisir la seule différence d'année. et aussi pas besoin de mettre l'instruction if pour gérer NULL
comme j'ai ajouté coalesece
qui renvoie d'abord NON Null
valeur, donc si d1
est NULL
il renvoie cuurent_date
Structure de la fonction :
CREATE OR REPLACE FUNCTION diff(d1 date,d2 date) RETURNS int AS $$
BEGIN
RETURN date_part('year',age(coalesce(d1,current_date), d2))::int;
END
$$ language plpgsql;
Appel de fonction :
select * from diff(null,'2010-04-01');
select * from diff('2012-10-01','2010-04-01');