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.
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
datelorsque 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
- Comment calculer l'âge (guide complet)
- Comment calculer l'âge dans Excel
- Comment calculer l'âge en JavaScript
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.