Hvernig á að reikna aldur í SQL (PostgreSQL, MySQL, SQL Server)
Lærðu hagnýt SQL mynstur til að reikna aldur út frá fæðingardegi: lokið ár, nákvæm ár og mánuði, og aldur á tilteknum degi. Inniheldur dæmi fyrir PostgreSQL, MySQL og SQL Server.
Þarftu að reikna aldur í SQL út frá fæðingardegi? Þessi leiðbeining sýnir hagnýtar fyrirspurnir, tilbúnar til afritunar, fyrir algenga gagnagrunna. Þú munt læra hvernig á að reikna út:
- Aldur í árum (lokið ár)
- Aldur á tilteknum degi (ekki bara í dag)
- Nákvæm útkoma (ár og mánuðir) þegar þú þarft nánari upplýsingar
1) Ákveddu hvað „aldur“ þýðir fyrir þitt notkunartilvik
Flest viðskiptarökfræði notar lokið ár. Það þýðir að sá sem fæddur er 2000-06-10 er 25 ára þann 2026-06-10, ekki fyrr. Vertu varkár með einfaldan árafrádrátt eins og YEAR(today) - YEAR(dob), því hann er rangur fyrir afmælið.
2) PostgreSQL: aldur í árum (lokið ár)
PostgreSQL hefur innbyggða age() aðgerð sem skilar bili. Dragðu út full ár svona:
SELECT EXTRACT(YEAR FROM age(CURRENT_DATE, dob)) AS age_years
FROM people;
PostgreSQL: aldur á tilteknum degi
SELECT EXTRACT(YEAR FROM age(DATE '2026-02-23', dob)) AS age_years
FROM people;
3) MySQL: aldur í árum (lokið ár)
Í MySQL, notaðu TIMESTAMPDIFF:
SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age_years
FROM people;
MySQL: aldur á tilteknum degi
SELECT TIMESTAMPDIFF(YEAR, dob, DATE('2026-02-23')) AS age_years
FROM people;
4) SQL Server: aldur í árum (lokið ár)
Algengt mynstur í SQL Server er DATEDIFF mínus afmælisathugun:
SELECT
DATEDIFF(YEAR, dob, CAST(GETDATE() AS date))
- CASE
WHEN DATEADD(YEAR, DATEDIFF(YEAR, dob, CAST(GETDATE() AS date)), dob) > CAST(GETDATE() AS date)
THEN 1 ELSE 0
END AS age_years
FROM people;
SQL Server: aldur á tilteknum degi
DECLARE @as_of date = '2026-02-23';
SELECT
DATEDIFF(YEAR, dob, @as_of)
- CASE
WHEN DATEADD(YEAR, DATEDIFF(YEAR, dob, @as_of), dob) > @as_of
THEN 1 ELSE 0
END AS age_years
FROM people;
5) Dæmi um nákvæman aldur (ár og mánuðir)
Ef þú vilt "nákvæma" framsetningu eins og "31 ár 4 mánuðir", reiknaðu ár fyrst, síðan mánuði eftir síðasta afmæli. Hér er eitt dæmi fyrir PostgreSQL:
WITH base AS (
SELECT dob, CURRENT_DATE AS as_of
FROM people
)
SELECT
EXTRACT(YEAR FROM age(as_of, dob)) AS years,
EXTRACT(MONTH FROM age(as_of, dob)) AS months
FROM base;
Algengar gildrur
- Tímabelti: geymdu fæðingardag sem
dateþegar mögulegt er. Dagsetningar og tímar geta færst á milli tímabelta. - Hlaupársafmæli: skilgreindu hvað gerist á árum sem ekki eru hlaupár. Flest kerfi meðhöndla fæðingardaga 2004-02-29 sem 02-28 eða 03-01 eftir stefnu.
- Núll eða framtíðarfæðingardagur: síaðu eða verðu, annars mun fyrirspurnin þín skila núllum eða neikvæðum gildum.
Stutt staðfesting
Ef þú vilt staðfesta einn fæðingardag fljótt geturðu notað netreiknivélina: Reikna aldur á netinu.
Tengdar leiðbeiningar
- Hvernig á að reikna aldur (fullkomin leiðbeining)
- Hvernig á að reikna aldur í Excel
- Hvernig á að reikna aldur í JavaScript
Algengar spurningar
Hvers vegna er YEAR(today) mínus YEAR(dob) rangt?
Það hunsar hvort afmælið hafi þegar verið á þessu ári, svo það ofmetur aldur fyrir afmælið.
Hver er öruggasta SQL gerðin fyrir fæðingardag?
Notaðu date dálk (ekki datetime) fyrir fæðingardag ef þú hefur aðeins áhuga á almanaksdeginum.