I Postgres, age()
funktion returnerar åldern baserat på två tidsstämpel- eller datumvariabler.
Resultatet returneras med år och månader, snarare än bara dagar.
Ett resultat kan till exempel se ut så här:3 år 2 månader 30 dagar .
Syntax
Du kan använda en av följande två syntaxer:
age(timestamp)
age(timestamp, timestamp)
Den första returnerar åldern baserat på det aktuella datumet. Specifikt subtraherar den från current_date()
(vid midnatt).
Den andra syntaxen låter dig få datumet baserat på två explicita datum. Att använda denna syntax gör att det andra datumet subtraheras från det första. Med andra ord, åldern är inte baserad på dagens datum – den är baserad på det datum som anges i det första argumentet.
Exempel 1 – Använd dagens datum
Här är ett exempel för att demonstrera den första syntaxen.
SELECT age(timestamp '1987-03-14');
Resultat:
33 years 2 mons 30 days
I det här fallet gav jag ett enda argument. age()
funktion subtraherade sedan det från dagens datum (datumet då jag körde frågan) och vi får resultatet.
Bara för att demonstrera detta ytterligare, här är det igen, men den här gången tillsammans med current_date()
för att visa datumet då jag körde frågan.
SELECT
current_date,
age(timestamp '1987-03-14');
Resultat:
current_date | age --------------+------------------------- 2020-06-13 | 33 years 2 mons 30 days
Exempel 2 – Använd ett anpassat datum
I det här exemplet ger jag två datum att jämföra med. Därför är åldern inte baserad på dagens datum. Det är baserat på det första datumet som gavs till age()
funktion.
SELECT age(timestamp '2001-01-01', timestamp '2000-03-14');
Resultat:
9 mons 18 days
I det här fallet är åldern mindre än ett år och året nämns därför inte i resultaten.
Här är ett annat exempel som visar vad som händer om bara året ändras (dvs. månads- och dagdelarna för de två datumen är exakt samma, men året är olika).
SELECT age(timestamp '2007-01-01', timestamp '2000-01-01');
Resultat:
7 years
Så återigen, det utelämnar helt enkelt de delar som inte är relevanta (i det här fallet månaderna och dagarna).
Exempel 3 – Identiska datum
Det här är vad som händer om båda datumen är samma.
SELECT age(timestamp '2001-01-01', timestamp '2001-01-01');
Resultat:
00:00:00
Exempel 4 – Negativ ålder
Om den andra dejten är senare än den första dejten får du en negativ ålder.
SELECT age(timestamp '2001-01-01', timestamp '2002-03-07');
Resultat:
-1 years -2 mons -6 days
Här sätts minustecknet före alla komponenter i datumet (d.v.s. komponenterna år, månad och dagar).
Exempel 5 – Ålder i år
Om du bara vill ha åldern i år kan du använda antingen extract()
eller date_part()
för att extrahera året från age()
funktions returvärde.
Här är ett exempel som använder extract()
funktion:
SELECT extract(year from age(timestamp '1997-10-25'));
Resultat:
22.0
Det är så det ser ut när jag kör det i Azure Data Studio.
När jag kör det i psql , jag får det här:
22
Båda extract()
och date_part()
returnera sina resultat med hjälp av datatypen dubbel precision.
Du kan konvertera detta till ett heltal (eller annan datatyp) om det behövs, genom att lägga till det med ::int
.
SELECT extract(year from age(timestamp '1997-10-25'))::int;
Resultat:
22