Aftur í Blogg
3 min read

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.

Hvernig á að reikna aldur í SQL (PostgreSQL, MySQL, 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

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.