sql >> Database >  >> RDS >> PostgreSQL

Hoe age() werkt in PostgreSQL

In Postgres, de age() functie retourneert de leeftijd op basis van twee tijdstempel- of datumvariabelen.

Het resultaat wordt geretourneerd met jaren en maanden, in plaats van alleen dagen.

Een resultaat kan er bijvoorbeeld als volgt uitzien:3 jaar 2 maanden 30 dagen .

Syntaxis

U kunt een van de volgende twee syntaxis gebruiken:

age(timestamp)
age(timestamp, timestamp)

De eerste retourneert de leeftijd op basis van de huidige datum. In het bijzonder trekt het af van current_date() (om middernacht).

Met de tweede syntaxis kunt u de datum krijgen op basis van twee expliciete datums. Het gebruik van deze syntaxis zorgt ervoor dat de tweede datum wordt afgetrokken van de eerste. Met andere woorden, de leeftijd is niet gebaseerd op de datum van vandaag - het is gebaseerd op de datum in het eerste argument.

Voorbeeld 1 – Gebruik de datum van vandaag

Hier is een voorbeeld om de eerste syntaxis te demonstreren.

SELECT 	age(timestamp '1987-03-14');

Resultaat:

33 years 2 mons 30 days

In dit geval heb ik een enkel argument gegeven. De age() functie trok dat vervolgens af van de datum van vandaag (de datum waarop ik de zoekopdracht heb uitgevoerd) en we krijgen het resultaat.

Om dit verder te demonstreren, hier is het weer, maar deze keer naast current_date() om de datum te tonen waarop ik de zoekopdracht heb uitgevoerd.

SELECT 	
  current_date,
  age(timestamp '1987-03-14');

Resultaat:

 current_date |           age           
--------------+-------------------------
 2020-06-13   | 33 years 2 mons 30 days

Voorbeeld 2 – Gebruik een aangepaste datum

In dit voorbeeld geef ik twee datums om mee te vergelijken. Daarom is de leeftijd niet gebaseerd op de datum van vandaag. Het is gebaseerd op de eerste datum die is verstrekt aan de age() functie.

SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');

Resultaat:

9 mons 18 days

In dit geval is de leeftijd minder dan een jaar en wordt het jaar dus niet vermeld in de resultaten.

Hier is nog een voorbeeld dat laat zien wat er gebeurt als alleen het jaar verandert (d.w.z. de maand- en dagdelen van de twee datums zijn precies hetzelfde, maar het jaar is anders).

SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');

Resultaat:

7 years

Dus nogmaals, het laat gewoon de delen weg die niet relevant zijn (in dit geval de maanden en dagen).

Voorbeeld 3 – Identieke datums

Dit is wat er gebeurt als beide datums hetzelfde zijn.

SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');

Resultaat:

00:00:00

Voorbeeld 4 – Negatieve leeftijd

Als de tweede date later is dan de eerste date, krijg je een negatieve leeftijd.

SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');

Resultaat:

-1 years -2 mons -6 days

Hier wordt het minteken toegevoegd aan alle componenten van de datum (d.w.z. de componenten jaar, maand en dagen).

Voorbeeld 5 – Leeftijd in jaren

Als u alleen de leeftijd in jaren wilt, kunt u ofwel extract() . gebruiken of date_part() om het jaar uit de age() te halen de geretourneerde waarde van de functie.

Hier is een voorbeeld dat de extract() . gebruikt functie:

SELECT extract(year from age(timestamp '1997-10-25'));

Resultaat:

22.0

Zo ziet het eruit als ik het in Azure Data Studio uitvoer.

Als ik het uitvoer in psql , ik krijg dit:

22

Beide extract() en date_part() hun resultaten retourneren met het gegevenstype dubbele precisie.

U kunt dit indien nodig naar een geheel getal (of een ander gegevenstype) converteren door het toe te voegen met ::int .

SELECT extract(year from age(timestamp '1997-10-25'))::int;

Resultaat:

22

  1. Interne SQL Server:problematische operators Pt. II – Hashing

  2. 3 manieren om dubbele rijen in SQL Server te verwijderen terwijl de primaire sleutel wordt genegeerd

  3. De schoonste manier om een ​​SQL-string in Java te bouwen

  4. Kan de standaarddatabase van de gebruiker niet openen. Inloggen mislukt. na installatie van SQL Server Management Studio Express