PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Unterschied zwischen zwei Daten in postgresql

Versuchen Sie:

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

age(d1,d2) Die Funktion gibt die Anzahl der Jahre, Monate und Tage zwischen zwei Datumsangaben im folgenden Format zurück:

xxx year(s) xxx mon(s) xxx day(s).

aus dieser Ausgabe mit date_part() um die nur den Jahresunterschied zu holen. und auch keine Notwendigkeit, eine if-Anweisung zu setzen, um NULL zu behandeln da ich coalesece hinzugefügt habe was zuerst NON Null zurückgibt Wert, also wenn d1 ist NULL es gibt cuurent_date zurück

Funktionsstruktur:

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;

Funktionsaufruf:

select * from diff(null,'2010-04-01');
select * from diff('2012-10-01','2010-04-01');