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.
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
datonå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
- Hvordan beregne alder (komplett veiledning)
- Slik beregner du alder i Excel
- Slik beregner du alder i JavaScript
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.