Tillbake till Bloggen
3 min read

Hvordan beregne alder i SQL (PostgreSQL, MySQL, SQL Server)

Lær praktiske SQL-mønstre for å beregne alder fra en fødselsdato: fullførte år, nøyaktige år og måneder, og alder fra en bestemt dato. Inkluderer eksempler for PostgreSQL, MySQL og SQL Server.

Hvordan beregne alder i SQL (PostgreSQL, MySQL, SQL Server)

Trenger du å beregne alder i SQL fra en fødselsdato? Denne veiledningen viser praktiske, kopieringsklare spørringer for vanlige databaser. Du lærer hvordan du regner:

  • Alder i år (år fullført)
  • Alder på en bestemt dato (ikke bare i dag)
  • En nøyaktig stilutgang (år og måneder) når du trenger flere detaljer

1) Bestem hva «alder» betyr for bruken din

De fleste forretningslogikk bruker år fullført. Det betyr at noen født 2000-06-10 er 25 år 2026-06-10, ikke tidligere. Vær forsiktig med enkel årsubtraksjon som YEAR(i dag) – YEAR(dob), fordi det er feil før bursdagen.

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

PostgreSQL har en innebygd age()-funksjon som returnerer et intervall. Trekk ut hele år slik:

VELG EKSTRAKT(YEAR FROM age(CURRENT_DATE, dob)) AS age_years
FRA folk;

PostgreSQL: alder fra en bestemt dato

VELG UTTREKK (ÅR FRA alder (DATO '2026-02-23', dob)) AS age_years
FRA folk;

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

I MySQL, bruk TIMESTAMPDIFF:

VELG TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age_years
FRA folk;

MySQL: alder fra en bestemt dato

VELG TIMESTAMPDIFF(YEAR, dob, DATE('2026-02-23')) AS age_years
FRA folk;

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

Et vanlig mønster i SQL Server er DATEDIFF minus en bursdagssjekk:

VELG
  DATEDIFF(ÅR, dob, CAST(GETDATE() AS dato))
  - CASE
      NÅR DATEADD(YEAR, DATEDIFF(YEAR, dob, CAST(GETDATE() AS date)), dob) > CAST(GETDATE() AS date)
      SÅ 1 ANNET 0
    SLUTT SOM age_years
FRA folk;

SQL-server: alder fra en bestemt dato

DECLARE @as_of date = '2026-02-23';
VELG
  DATEDIFF(YEAR, dob, @as_of)
  - CASE
      NÅR DATEADD(YEAR, DATEDIFF(YEAR, dob, @as_of), dob) > @as_of
      SÅ 1 ANNET 0
    SLUTT SOM age_years
FRA folk;

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

Hvis du vil ha en «nøyaktig» presentasjon som «31 år 4 måneder», beregne år først, deretter måneder etter siste bursdag. Her er ett PostgreSQL-eksempel:

MED base AS (
  SELECT dob, CURRENT_DATE AS pr
  FRA folk
)
VELG
  EXTRACT(YEAR FROM age(as_of, dob)) AS years,
  EXTRACT(MONTH FROM age(as_of, dob)) AS months
FRA base;

Vanlige fallgruver

  • Tidssoner: lagre DOB som en dato når det er mulig. Dato og klokkeslett kan skifte mellom soner.
  • skudddagbursdager: definer hva som skjer i andre skuddår. De fleste systemer behandler 2004-02-29 bursdager som 02-28 eller 03-01 avhengig av policy.
  • Null eller fremtidig DOB: filter eller vakt, ellerssøket ditt vil returnere nullverdier eller negative verdier.

Rask fornuftssjekk

Hvis du vil bekrefte en enkelt DOB raskt, kan du bruke den elektroniske kalkulatoren: Beregn alder på nettet.

Relaterte veiledninger

Vanlige spørsmål

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

Den ignorerer om bursdagen har skjedd ennå i år, så den overdriver alder før bursdagen.

Hva er den sikreste SQL-typen for fødselsdato?

Bruk en dato-kolonne (ikke datetime) for DOB hvis du bare bryr deg om kalenderdagen.