sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur age() fungerar i PostgreSQL

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

  1. Är det möjligt att köra en sträng i MySQL?

  2. SQL Server Standard Edition High Availability Futures

  3. Hur man sammanfogar strängar i MySQL med CONCAT()

  4. SET DATEFIRST – Ställ in den första dagen i veckan i SQL Server