Retour au Blog
4 min read

Comment calculer l'âge en SQL (PostgreSQL, MySQL, SQL Server)

Apprenez des modèles SQL pratiques pour calculer l'âge à partir d'une date de naissance : années révolues, années et mois exacts et âge à une date spécifique. Inclut des exemples pour PostgreSQL, MySQL et SQL Server.

Comment calculer l'âge en SQL (PostgreSQL, MySQL, SQL Server)

Besoin de calculer l'âge en SQL à partir d'une date de naissance ? Ce guide présente des requêtes pratiques et prêtes à être copiées pour les bases de données courantes. Vous apprendrez à calculer :

  • Âge en années (années révolues)
  • Âge à une date précise (pas seulement aujourd'hui)
  • Un résultat de style exact (années et mois) lorsque vous avez besoin de plus de détails

1) Décidez de ce que « âge » signifie pour votre cas d'utilisation

La plupart des logiques métier utilisent années terminées. Cela signifie qu'une personne née le 10/06/2000 a 25 ans le 10/06/2026, pas avant. Soyez prudent avec une simple soustraction d'année comme ANNÉE(aujourd'hui) - ANNÉE(dob), car elle est fausse avant l'anniversaire.

2) PostgreSQL : âge en années (années révolues)

PostgreSQL possède une fonction age() intégrée qui renvoie un intervalle. Extrayez les années complètes comme ceci :

SELECT EXTRACT(YEAR FROM age(CURRENT_DATE, dob)) AS age_years
DE personnes ;

PostgreSQL : âge à une date spécifique

SELECT EXTRACT(YEAR FROM age(DATE '2026-02-23', dob)) AS age_years
DE personnes ;

3) MySQL : âge en années (années révolues)

Dans MySQL, utilisez TIMESTAMPDIFF :

SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age_years
DE personnes ;

MySQL : âge à une date précise

SELECT TIMESTAMPDIFF(YEAR, dob, DATE('2026-02-23')) AS age_years
DE personnes ;

4) SQL Server : âge en années (années révolues)

Un modèle courant dans SQL Server est DATEDIFF moins un chèque d'anniversaire :

SELECT
  DATEDIFF(ANNÉE, date de naissance, CAST(GETDATE() AS date))
  - CAS
      QUAND DATEADD(ANNÉE, DATEDIFF(ANNÉE, dob, CAST(GETDATE() AS date)), dob) > CAST(GETDATE() AS date)
      PUIS 1 AUTRE 0
    FIN COMME age_years
DE personnes ;

SQL Server : âge à une date précise

DÉCLARE @as_of date = '2026-02-23';
SÉLECTIONNER
  DATEDIFF (ANNÉE, date de naissance, @as_of)
  - CAS
      QUAND DATEADD(YEAR, DATEDIFF(YEAR, dob, @as_of), dob) > @as_of
      PUIS 1 AUTRE 0
    FIN COMME age_years
DE personnes ;

5) Exemple d'âge exact (années et mois)

Si vous souhaitez une présentation "exacte" comme "31 ans 4 mois", calculez d'abord les années, puis les mois après le dernier anniversaire. Voici un exemple PostgreSQL :

AVEC base AS (
  SELECT dob, CURRENT_DATE AS as_of
  DE personnes
)
SÉLECTIONNER
  EXTRACT(YEAR FROM age(as_of, dob)) AS années,
  EXTRACT(MONTH FROM age(as_of, dob)) AS mois
DEPUIS la base ;

Pièges courants

  • Fuseau horaire : enregistrez la date de naissance sous la forme d'une date lorsque cela est possible. Les dates et heures peuvent varier d'une zone à l'autre.
  • Anniversaires bissextiles : définissez ce qui se passe les années non bissextiles. La plupart des systèmes traitent les anniversaires du 29/02/2004 comme étant le 28/02 ou le 01/03, selon la politique.
  • DOB nulle ou future : filtre ou garde, sinonvotre requête renverra des valeurs nulles ou négatives.

Vérification rapide de l'intégrité

Si vous souhaitez vérifier rapidement une seule date de naissance, vous pouvez utiliser le calculateur en ligne : Calculer l'âge en ligne.

Guides associés

FAQ

Pourquoi ANNÉE(aujourd'hui) moins ANNÉE(dob) est-elle erronée ?

Il ignore si l'anniversaire a déjà eu lieu cette année, il surestime donc l'âge avant l'anniversaire.

Quel est le type SQL le plus sûr pour la date de naissance ?

Utilisez une colonne date (et non datetime) pour la date de naissance si vous ne vous souciez que du jour calendaire.