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.
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
- Sådan beregnes alder (komplet vejledning)
- Sådan beregner du alder i Excel
- Sådan beregner man alder i JavaScript
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.