PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Diferença entre duas datas no postgresql


Tentar :
date_part('year',age(coalesce(d1,current_date), d2))::int;

age(d1,d2) A função retorna o número de anos, meses e dias entre duas datas no seguinte formato:
xxx year(s) xxx mon(s) xxx day(s).

desta saída usando date_part() para escolher a única diferença do ano. e também não há necessidade de colocar a instrução if para lidar com NULL como eu adicionei coalesece que retorna primeiro NON Null valor, então se d1 é NULL ele retorna cuurent_date

Estrutura da Função:
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;

Chamada de função:
select * from diff(null,'2010-04-01');
select * from diff('2012-10-01','2010-04-01');