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 ?
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!