Maison >base de données >tutoriel mysql >Comment calculer avec précision l'âge dans SQL Server en utilisant la date de naissance ?

Comment calculer avec précision l'âge dans SQL Server en utilisant la date de naissance ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-22 13:26:09460parcourir

How to Accurately Calculate Age in SQL Server Using Date of Birth?

Calcul précis de l'âge dans SQL Server en utilisant la date de naissance

SQL Server propose des méthodes efficaces pour calculer l'âge à partir d'une date de naissance. La fonction CAST() convertit facilement les chaînes de date de naissance en type de données DATE/DATETIME, permettant divers calculs de date, y compris la détermination de l'âge.

Considérez cet exemple de données :

ID Name DOB
1 John 1992-01-09 00:00:00
2 Sally 1959-05-20 00:00:00

Calcul de l'âge avec DATEDIFF()

La fonction DATEDIFF() calcule la différence entre deux dates. En le combinant avec GETDATE() (qui fournit la date et l'heure actuelles), nous pouvons déterminer l'âge en différentes unités :

<code class="language-sql">SELECT ID, Name, DATEDIFF(hour, DOB, GETDATE()) AS AgeInHours,
       CONVERT(int, ROUND(DATEDIFF(day, DOB, GETDATE()) / 365.25, 0)) AS AgeYearsApprox
FROM table_name;</code>

Cela donne un âge approximatif en années, représentant le nombre moyen de jours dans une année (365,25). Une méthode plus précise est nécessaire pour des résultats précis.

Méthodes améliorées de calcul de l'âge

Pour une plus grande précision, notamment lorsque l'on considère les années bissextiles, des approches plus sophistiquées sont recommandées.

Âge entier :

Cette méthode fournit l'âge en années entières :

<code class="language-sql">SELECT ID, Name,
       (YEAR(GETDATE()) - YEAR(DOB)) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeYearsInt
FROM table_name;</code>

Âge décimal (plus précis) :

Ce calcul propose un âge plus précis, incluant les années fractionnaires :

<code class="language-sql">SELECT ID, Name,
       DATEDIFF(year, DOB, GETDATE()) +
       CASE
           WHEN DATEADD(year, DATEDIFF(year, DOB, GETDATE()), DOB) > GETDATE() THEN -1
           ELSE 0
       END AS AgeYearsDecimal
FROM table_name;</code>

Ces méthodes améliorées fournissent des calculs d'âge plus précis, gérant les complexités des années bissextiles et des différences entre les jours de l'année pour des résultats plus fiables. Choisissez la méthode qui correspond le mieux à vos exigences de précision.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn