Tillbaka till Bloggen
3 min read

Hur man beräknar ålder i SQL (PostgreSQL, MySQL, SQL Server)

Lär dig praktiska SQL-mönster för att beräkna ålder från ett födelsedatum: genomförda år, exakta år och månader och ålder från ett specifikt datum. Inkluderar exempel för PostgreSQL, MySQL och SQL Server.

Hur man beräknar ålder i SQL (PostgreSQL, MySQL, SQL Server)

Behöver du beräkna ålder i SQL från ett födelsedatum? Den här guiden visar praktiska, kopieringsklara frågor för vanliga databaser. Du kommer att lära dig hur du beräknar:

  • Ålder i år (avslutade år)
  • Ålder från ett specifikt datum (inte bara idag)
  • En exakt stilutskrift (år och månader) när du behöver mer detaljer

1) Bestäm vad "ålder" betyder för ditt användningsfall

De flesta affärslogik använder år genomförda. Det betyder att någon född 2000-06-10 är 25 år 2026-06-10, inte tidigare. Var försiktig med enkel årssubtraktion som YEAR(idag) - YEAR(dob), eftersom det är fel före födelsedagen.

2) PostgreSQL: ålder i år (avslutade år)

PostgreSQL har en inbyggd funktion age() som returnerar ett intervall. Extrahera hela år så här:

VÄLJ EXTRAKT(YEAR FROM age(CURRENT_DATE, dob)) AS age_years
FRÅN personer;

PostgreSQL: ålder från ett specifikt datum

VÄLJ EXTRAKT(ÅR FROM ålder(DATE '2026-02-23', dob)) AS age_years
FRÅN personer;

3) MySQL: ålder i år (avslutade år)

I MySQL, använd TIMESTAMPDIFF:

VÄLJ TIDSTAMPDIFF(YEAR, dob, CURDATE()) AS age_years
FRÅN personer;

MySQL: ålder från ett specifikt datum

VÄLJ TIDSTAMPDIFF(YEAR, dob, DATE('2026-02-23')) AS age_years
FRÅN personer;

4) SQL Server: ålder i år (avslutade år)

Ett vanligt mönster i SQL Server är DATEDIFF minus en födelsedagscheck:

VÄLJ
  DATEDIFF(YEAR, dob, CAST(GETDATE() AS date))
  - FALL
      NÄR DATEADD(YEAR, DATEDIFF(YEAR, dob, CAST(GETDATE() AS date)), dob) > CAST(GETDATE() AS date)
      SEDAN 1 ANNAN 0
    SLUTA SOM ålder_år
FRÅN personer;

SQL-server: ålder från ett specifikt datum

DECLARE @as_of date = '2026-02-23';
VÄLJ
  DATEDIFF(YEAR, dob, @as_of)
  - FALL
      NÄR DATEADD(YEAR, DATEDIFF(YEAR, dob, @as_of), dob) > @as_of
      SEDAN 1 ANNAN 0
    SLUTA SOM ålder_år
FRÅN personer;

5) Exakt ålder (år och månader) exempel

Om du vill ha en "exakt" presentation som "31 år 4 månader", beräkna år först och sedan månader efter den senaste födelsedagen. Här är ett PostgreSQL-exempel:

MED bas AS (
  SELECT dob, CURRENT_DATE AS as_of
  FRÅN människor
)
VÄLJ
  EXTRACT(YEAR FROM age(as_of, dob)) AS years,
  EXTRACT(MONTH FROM age(as_of, dob)) AS months
FRÅN basen;

Vanliga fallgropar

  • Tidszoner: lagra DOB som ett datum när det är möjligt. Datum och tider kan variera mellan olika zoner.
  • skottdagars födelsedagar: definiera vad som händer under icke skottår. De flesta system behandlar 2004-02-29 födelsedagar som 02-28 eller 03-01 beroende på policy.
  • Null eller framtida DOB: filter eller skydd, annarsdin fråga kommer att returnera nollvärden eller negativa värden.

Snabb förnuftskontroll

Om du vill verifiera en enskild DOB snabbt kan du använda online-kalkylatorn: Beräkna ålder online.

Relaterade guider

Vanliga frågor

Varför är YEAR(idag) minus YEAR(dob) fel?

Den ignorerar om födelsedagen har inträffat ännu i år, så den överskattar åldern före födelsedagen.

Vilken är den säkraste SQL-typen för födelsedatum?

Använd kolumnen datum (inte datetime) för DOB om du bara bryr dig om kalenderdagen.