Tilbage till Bloggen
3 min read

Sådan beregnes alder i SQL (PostgreSQL, MySQL, SQL Server)

Lær praktiske SQL-mønstre til at beregne alder ud fra en fødselsdato: fuldførte år, nøjagtige år og måneder og alder fra en bestemt dato. Indeholder eksempler til PostgreSQL, MySQL og SQL Server.

Sådan beregnes alder i SQL (PostgreSQL, MySQL, SQL Server)

Har du brug for at beregne alder i SQL fra en fødselsdato? Denne vejledning viser praktiske, kopiklare forespørgsler til almindelige databaser. Du lærer, hvordan du regner:

  • Alder i år (år fuldført)
  • Alder på en bestemt dato (ikke kun i dag)
  • En nøjagtig stil-output (år og måneder), når du har brug for flere detaljer

1) Beslut, hvad "alder" betyder for din brug

De fleste forretningslogikker bruger år gennemført. Det betyder, at en person født 2000-06-10 er 25 år 2026-06-10, ikke tidligere. Vær forsigtig med simpel årsubtraktion som YEAR(i dag) - YEAR(dob), fordi det er forkert før fødselsdagen.

2) PostgreSQL: alder i år (år fuldført)

PostgreSQL har en indbygget funktion age(), der returnerer et interval. Uddrag hele år som dette:

VÆLG EKSTRAKT(ÅR FRA alder(CURRENT_DATE, dob)) SOM age_years
FRA personer;

PostgreSQL: alder fra en bestemt dato

VÆLG UDDRAG (ÅR FRA alder (DATO '2026-02-23', dob)) AS age_years
FRA personer;

3) MySQL: alder i år (år fuldført)

I MySQL skal du bruge TIMESTAMPDIFF:

VÆLG TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age_years
FRA personer;

MySQL: alder fra en bestemt dato

VÆLG TIMESTAMPDIFF(YEAR, dob, DATE('2026-02-23')) AS age_years
FRA personer;

4) SQL Server: alder i år (år fuldført)

Et almindeligt mønster i SQL Server er DATEDIFF minus en fødselsdagscheck:

VÆLG
  DATODIFF(ÅR, dob, CAST(GETDATE() SOM dato))
  - CASE
      WHEN DATEADD(YEAR, DATEDIFF(YEAR, dob, CAST(GETDATE() AS date)), dob) > CAST(GETDATE() AS date)
      SÅ 1 ANDEN 0
    SLUT SOM alder_år
FRA personer;

SQL-server: alder fra en bestemt dato

DECLARE @as_of date = '2026-02-23';
VÆLG
  DATODIFF(ÅR, dob, @som_af)
  - CASE
      WHEN DATEADD(YEAR, DATEDIFF(YEAR, dob, @as_of), dob) > @as_of
      SÅ 1 ANDEN 0
    SLUT SOM alder_år
FRA personer;

5) Eksakt alder (år og måneder) eksempel

Hvis du vil have en "præcis" præsentation som "31 år 4 måneder", skal du først beregne år og derefter måneder efter den sidste fødselsdag. Her er et PostgreSQL-eksempel:

MED base AS (
  SELECT dob, CURRENT_DATE AS as_of
  FRA mennesker
)
VÆLG
  UDTAG(ÅR FRA alder(som_of, dob)) AS år,
  EXTRACT(MONTH FROM age(as_of, dob)) AS months
FRA base;

Almindelige faldgruber

  • Tidszoner: Gem DOB som en dato, når det er muligt. Datotider kan skifte på tværs af zoner.
  • Skiddagsfødselsdage: Definer, hvad der sker i ikke-skudår. De fleste systemer behandler 2004-02-29 fødselsdage som 02-28 eller 03-01 afhængigt af politik.
  • Nul eller fremtidig DOB: filter eller beskyttelse, ellersdin forespørgsel returnerer null eller negative værdier.

Hurtigt fornuftstjek

Hvis du vil bekræfte en enkelt DOB hurtigt, kan du bruge online-beregneren: Beregn alder online.

Relaterede guider

Ofte stillede spørgsmål

Hvorfor er YEAR(i dag) minus YEAR(dob) forkert?

Den ignorerer, om fødselsdagen har fundet sted endnu i år, så den overvurderer alderen før fødselsdagen.

Hvad er den sikreste SQL-type til fødselsdato?

Brug en dato kolonne (ikke datetime) for DOB, hvis du kun bekymrer dig om kalenderdagen.