In Postgres das age()
Die Funktion gibt das Alter basierend auf zwei Zeitstempel- oder Datumsvariablen zurück.
Das Ergebnis wird in Jahren und Monaten zurückgegeben, nicht nur in Tagen.
Ein Ergebnis könnte beispielsweise so aussehen:3 Jahre 2 Monate 30 Tage .
Syntax
Sie können eine der beiden folgenden Syntaxen verwenden:
age(timestamp)
age(timestamp, timestamp)
Die erste gibt das Alter basierend auf dem aktuellen Datum zurück. Insbesondere wird von current_date()
subtrahiert (um Mitternacht).
Die zweite Syntax ermöglicht es Ihnen, das Datum basierend auf zwei expliziten Daten zu erhalten. Die Verwendung dieser Syntax bewirkt, dass das zweite Datum vom ersten subtrahiert wird. Mit anderen Worten, das Alter basiert nicht auf dem heutigen Datum – es basiert auf dem im ersten Argument angegebenen Datum.
Beispiel 1 – Verwenden Sie das heutige Datum
Hier ist ein Beispiel, um die erste Syntax zu demonstrieren.
SELECT age(timestamp '1987-03-14');
Ergebnis:
33 years 2 mons 30 days
In diesem Fall habe ich ein einziges Argument geliefert. Das age()
Die Funktion subtrahiert das dann vom heutigen Datum (dem Datum, an dem ich die Abfrage ausgeführt habe) und wir erhalten das Ergebnis.
Nur um dies weiter zu demonstrieren, hier ist es noch einmal, aber dieses Mal neben current_date()
um das Datum anzuzeigen, an dem ich die Abfrage ausgeführt habe.
SELECT
current_date,
age(timestamp '1987-03-14');
Ergebnis:
current_date | age --------------+------------------------- 2020-06-13 | 33 years 2 mons 30 days
Beispiel 2 – Verwenden Sie ein benutzerdefiniertes Datum
In diesem Beispiel gebe ich zwei Daten zum Vergleich an. Daher basiert das Alter nicht auf dem heutigen Datum. Es basiert auf dem ersten Datum, das für age()
bereitgestellt wird Funktion.
SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');
Ergebnis:
9 mons 18 days
In diesem Fall ist das Alter kleiner als ein Jahr und daher wird das Jahr nicht in den Ergebnissen erwähnt.
Hier ist ein weiteres Beispiel, das zeigt, was passiert, wenn sich nur das Jahr ändert (d. h. die Monats- und Tagesteile der beiden Daten sind genau gleich, aber das Jahr ist unterschiedlich).
SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');
Ergebnis:
7 years
Auch hier werden die nicht relevanten Teile einfach weggelassen (in diesem Fall die Monate und Tage).
Beispiel 3 – Identische Daten
Folgendes passiert, wenn beide Daten gleich sind.
SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');
Ergebnis:
00:00:00
Beispiel 4 – Negatives Alter
Wenn das zweite Datum nach dem ersten Datum liegt, erhalten Sie ein negatives Alter.
SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');
Ergebnis:
-1 years -2 mons -6 days
Hier wird das Minuszeichen allen Datumskomponenten vorangestellt (d. h. den Jahres-, Monats- und Tageskomponenten).
Beispiel 5 – Alter in Jahren
Wenn Sie nur das Alter in Jahren wünschen, können Sie entweder extract()
verwenden oder date_part()
um das Jahr aus dem age()
zu extrahieren Rückgabewert der Funktion.
Hier ist ein Beispiel, das extract()
verwendet Funktion:
SELECT extract(year from age(timestamp '1997-10-25'));
Ergebnis:
22.0
So sieht es aus, wenn ich es in Azure Data Studio ausführe.
Wenn ich es in psql ausführe , bekomme ich das:
22
Beide extract()
und date_part()
geben ihre Ergebnisse unter Verwendung des Datentyps mit doppelter Genauigkeit zurück.
Sie können dies bei Bedarf in eine ganze Zahl (oder einen anderen Datentyp) umwandeln, indem Sie es mit ::int
anhängen .
SELECT extract(year from age(timestamp '1997-10-25'))::int;
Ergebnis:
22