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
Linda Hamiltonoriginal
2025-01-22 13:32:41336parcourir

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) :

<code class="language-sql">SELECT DATEDIFF(hour, @dob, GETDATE())/8766.0 AS AgeYearsDecimal</code>

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 :

<code class="language-sql">SELECT (CONVERT(int,CONVERT(char(8),@Now,112))-CONVERT(char(8),@Dob,112))/10000 AS AgeIntYears</code>

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 :

<code class="language-sql">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</code>

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:
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