Faq/Base/121/fr

From The Document Foundation Wiki
< Faq‎ | Base‎ | 121
Jump to: navigation, search

Comment calculer un âge à partir d'une date de naissance ?

  • On dispose d'un champ stockant des dates de naissance. On souhaite calculer l'âge à la date du jour.


copie d'écran âges calculés par requête, résultats sous la forme xx ans
Exemple calculé le 02/07/2011


La requête sera du type :

SELECT "DateNaissance", 
CASEWHEN Month(CURRENT_DATE) < month("DateNaissance") or ( Month(CURRENT_DATE) = Month("DateNaissance") and day(CURRENT_DATE) < day("DateNaissance") ) 
THEN CAST((year(CURRENT_DATE) - year("DateNaissance") -1) AS VARCHAR) || ' ans' 
ELSE CAST((year(CURRENT_DATE) - year("DateNaissance") ) AS VARCHAR) || ' ans'END as "Age"from "Table1"

Nota : L'usage de l'instruction CAST impose de valider le mode d'exécution directe du SQL en appuyant sur le bouton comme montré dans la copie d'écran ci-dessous :


copie d'écran requête, enfoncer execution directe sql
Nécessaire de valider l'exécution directe du SQL

Le message d'erreur en cas d'oubli serait : Syntax error in SQL expression


  • On souhaite calculer l'âge au jour près.


copie d'écran âges calculés par requête, 3 col. résultats : aa, mm, jj
Exemple calculé le 02/07/2011


La requête sera du type :

SELECT "DateNaissance", "Nom", YEAR(NOW())-YEAR("DateNaissance")-
CASE WHEN (MONTH( NOW() ) < MONTH("DateNaissance") OR ( MONTH( NOW() ) = MONTH("DateNaissance") AND 
DAY( NOW() ) < DAY ("DateNaissance"))) THEN 1 ELSE 0 END AS "ans", 
MONTH(NOW())-MONTH("DateNaissance") +
CASE WHEN MONTH(now()) <= MONTH("DateNaissance") AND DAY(NOW()) < DAY("DateNaissance")
THEN 11 ELSE
CASE 
WHEN MONTH(NOW()) < MONTH("DateNaissance") AND DAY(NOW()) >= DAY("DateNaissance")
THEN 12 ELSE
CASE WHEN MONTH(NOW()) > MONTH("DateNaissance") AND DAY(NOW()) < DAY("DateNaissance")
THEN -1 ELSE 0
END
END
END AS "mois", 
DATEDIFF('DAY', cast(YEAR(NOW()) || '-' || right( 0 || MONTH(NOW())  - casewhen DAY(NOW()) < DAY("DateNaissance")
THEN 1 ELSE 0
END, 2) || '-' || right( 0 || DAY("DateNaissance"), 2) AS DATE) , NOW() ) AS "jours" FROM "Table1"