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.
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
datumnä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
- Hur man beräknar ålder (komplett guide)
- Hur man beräknar ålder i Excel
- Hur man beräknar ålder i JavaScript
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.