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

Comment puis-je calculer avec précision l'âge en années à partir d'une date de naissance à l'aide de SQL ?

Linda Hamilton
Libérer: 2025-01-22 13:32:41
original
414 Les gens l'ont consulté

How Can I Accurately Calculate Age in Years from a Date of Birth Using SQL?

Calcul de l'âge en années à partir d'une date de naissance avec SQL : une approche précise

Un calcul précis de l'âge en SQL, basé sur une date de naissance, nécessite que la colonne de date de naissance soit d'un type de données datetime ou date valide. Si votre colonne de date de naissance est actuellement nvarchar(25), vous devez d'abord la convertir dans un format de date approprié.

En supposant que cette conversion soit terminée, examinons les méthodes efficaces de calcul de l'âge :

Méthode 1 : Une approche simplifiée (approximative)

Cette méthode utilise DATEDIFF pour trouver la différence en heures entre la date actuelle et la date de naissance, puis divise par le nombre approximatif d'heures dans une année (8766.0) :

SELECT DATEDIFF(hour, @dob, GETDATE())/8766.0 AS AgeYearsDecimal
Copier après la connexion

Cela donne un âge décimal, mais sa précision est limitée en raison des variations du nombre de jours par mois et des années bissextiles.

Méthodes améliorées et plus précises :

Calcul de l'âge entier :

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

SELECT (CONVERT(int,CONVERT(char(8),@Now,112))-CONVERT(char(8),@Dob,112))/10000 AS AgeIntYears
Copier après la connexion

Calcul précis de l'âge décimal :

Pour un âge décimal plus précis, cette méthode améliorée est recommandée :

SELECT 1.0* DateDiff(yy,@Dob,@Now)
    +CASE
         WHEN @Now >= DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)) THEN
           (
              1.0   
              * DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)),@Now)
              / DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),1,1),DATEFROMPARTS(DATEPART(yyyy,@Now)+1,1,1))
           )
         ELSE 
           -1 
           * (       
                * DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),DATEPART(m,@Dob),DATEPART(d,@Dob)),@Now) 
                / DATEDIFF(day,DATEFROMPARTS(DATEPART(yyyy,@Now),1,1),DATEFROMPARTS(DATEPART(yyyy,@Now)+1,1,1))
                )
     END AS AgeYearsDecimal
Copier après la connexion

Cette méthode avancée prend en compte les années bissextiles et fournit une représentation décimale très précise de l'âge en années. C'est la méthode privilégiée pour les situations nécessitant des calculs d'âge précis.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal