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

Funktionsweise von age() in PostgreSQL

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