PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Différence entre deux dates dans postgresql

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');