Maison >base de données >tutoriel mysql >Comment calculer avec précision l'âge en années à partir d'une date de naissance dans SQL Server ?

Comment calculer avec précision l'âge en années à partir d'une date de naissance dans SQL Server ?

DDD
DDDoriginal
2025-01-22 13:41:10175parcourir

How to Accurately Calculate Age in Years from a Date of Birth in SQL Server?

Calculer avec précision l'âge par date de naissance dans SQL Server

Question :

Comment convertir une date de naissance stockée sous nvarchar(25) en une date dans SQL Server et calculer ensuite son âge correspondant en années ?

Exemples de données :

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

Résultat attendu :

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

Réponse : Calculer l'âge avec précision

La méthode initialement proposée se heurtait à des difficultés liées à la prise en compte des années bissextiles et des irrégularités dans le nombre de jours du mois. Les versions modernes de SQL Server nous fournissent des techniques améliorées pour résoudre ces complexités.

La meilleure façon de calculer l'âge en nombres entiers :

Cette méthode est simple et directe, mais la précision peut être légèrement inférieure à la méthode décimale.

<code class="language-sql">SELECT
    (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 AgeIntYears
FROM YourTable;</code>

La meilleure façon de calculer l'âge sous forme décimale :

Cette méthode utilise la fonction DATEDIFF et l'instruction CASE pour calculer avec précision l'âge et considère si l'anniversaire est passé dans l'année en cours.

<code class="language-sql">SELECT
    DATEDIFF(year, DOB, GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(DOB) OR (MONTH(GETDATE()) = MONTH(DOB) AND DAY(GETDATE()) < DAY(DOB)) THEN 1 ELSE 0 END AS AgeYearsDecimal
FROM YourTable;</code>

Veuillez noter que le code ci-dessus suppose que la colonne DOB a été convertie en type DATE. Si DOB est toujours de type nvarchar(25), vous devez ajouter une conversion de type dans la requête, par exemple : CONVERT(DATE, DOB, 120). Le choix du style de transformation approprié dépend du format spécifique de vos DOB données. Par exemple, CONVERT(DATE, DOB, 120) est pour le format « aaaa-mm-jj hh:mi:ss ». Vous devrez peut-être ajuster cette section en fonction de votre format de données. La requête finale devrait ressembler à :

<code class="language-sql">SELECT
    DATEDIFF(year, CONVERT(DATE, DOB, 120), GETDATE()) - CASE WHEN MONTH(GETDATE()) < MONTH(CONVERT(DATE, DOB, 120)) OR (MONTH(GETDATE()) = MONTH(CONVERT(DATE, DOB, 120)) AND DAY(GETDATE()) < DAY(CONVERT(DATE, DOB, 120))) THEN 1 ELSE 0 END AS AgeYearsDecimal
FROM YourTable;</code>

Remplacez YourTable par le nom de votre table. Le choix de la méthode entière ou décimale dépend de vos besoins de précision. La méthode décimale est plus précise, mais la méthode entière est plus concise.

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