Page 1 sur 1

[Résolu] déterminer la date d'un anniversaire

MessagePublié: 13 Mai 2011 17:59
par niala38
Bonjour, à partir de dates de naissance d'une table, je voudrais déterminer la date de l'anniversaire de l'année en cours par une requête :
EXEMPLE NAISSANCE 8/10/1961, ANNIVERSAIRE 8/10/2011
je sais extraire de naissance le jour du mois DAYOFMONTH("naissance"), le mois, MONTH("naissance"), l'année en cours YEAR(CURRENT_DATE). Comment recoller ces morceaux pour obtenir la date de l'anniversaire ?
De manière plus générale, où peut-on trouver la liste des fonctions autorisées ?
Merci de votre aide

Re: déterminer la date d'un anniversaire

MessagePublié: 13 Mai 2011 20:20
par spYre
Bonjour niala38,

Tu peux utiliser une fonction de conversion du type CAST ou CONVERT.
Dans ton cas, il faut fournir les deux paramètres suivants :
- une chaîne de caractère représentant la date au format unique 'YYYY-MM-DD'
- le type cible pour la conversion, soit DATE.

Difficulté supplémentaire : les fonctions MONTH/DAY extraient des valeurs de 1 à 12/31. Or il faut toujours fournir des valeurs à deux chiffres.
La fonction CASEWHEN permet de régler le problème :

Code : Tout sélectionner   AgrandirRéduire
SELECT   "prénom",
      "naissance",
      CAST(
         YEAR( CURRENT_DATE ) || '-' ||
         CASEWHEN( MONTH( "naissance" ) < 10, '0' || MONTH( "naissance" ), '' || MONTH( "naissance" ) ) || '-' ||
         CASEWHEN( DAY( "naissance" ) < 10, '0' || DAY( "naissance" ), '' || DAY( "naissance" ) )
      AS DATE ) AS "Anniversaire"
FROM "T_individus"

Pour plus d'informations : suivre le Guide de l'utilisateur HSQL... épinglé en tête de la section Base de données :wink: .

Cordialement.

Re: déterminer la date d'un anniversaire

MessagePublié: 14 Mai 2011 03:54
par niala38
Merci spYre, tu m'as bien aidé !

J'ai encore les difficultés suivantes :
j'ai downloadé ton anniversaire.odb, mais je n'arrive pas à l'utiliser, je crois que je dois le référencer, mais je n'y arrive pas.

J'ai copié collé ta requête SQL dans une nouvelle requête de mon anniversaire.odb. J'obtiens les dates d'anniversaire sous forme d'entiers (40822, 40841), qui doivent représenter le nombre de jours écoulés depuis l'origine des dates. Comment le présenter en date ? formatage ou fonction ?

Je me suis fait "épingler" en ne voyant pas le fichier de documentation. "Ils ont des yeux, et ils ne voient pas..."

Encore un petit coup de pouce, et j'espère voler de mes propres ailes,

Cordialement

Re: déterminer la date d'un anniversaire

MessagePublié: 14 Mai 2011 08:54
par Pierre-Yves Samyn
Bonjour

niala38 a écrit:De manière plus générale, où peut-on trouver la liste des fonctions autorisées ?


Tu as aussi le fil épinglé en tête de cette section du forum : "techniques pour débuter avec en particulier : viewtopic.php?f=9&t=1543#p127981

niala38 a écrit:J'obtiens les dates d'anniversaire sous forme d'entiers (40822, 40841), qui doivent représenter le nombre de jours écoulés depuis l'origine des dates. Comment le présenter en date ? formatage ou fonction ?


Là encore tu peux trouver par exemple (toujours dans le même fil) : viewtopic.php?f=9&t=1543#p81847

Le format peut se définir par simple clic droit sur l'en-tête de la colonne. Faire ceci lorsqu'on a exécuté la requête depuis la base de données et non lors de son exécution depuis le mode ébauche car ce ne serait pas mémorisé...

Re: déterminer la date d'un anniversaire

MessagePublié: 14 Mai 2011 14:10
par niala38
Bonjour Pierre-Yves, j'ai compris le fonctionnement du fil !
En ce qui concerne le formatage d'une colonne d'entiers en dates, j'ai fait ce que tu m'as dit (clic droit sur en-tête de colonne de requête exécutée), j'obtiens bien des dates, mais pas de mémorisation du format lorsque j'exécute à nouveau la requête. Pas bien grave, mais j'ai peut-être loupé quelque chose ?
Cordialement

Re: déterminer la date d'un anniversaire

MessagePublié: 15 Mai 2011 07:43
par Pierre-Yves Samyn
niala38 a écrit:En ce qui concerne le formatage d'une colonne d'entiers en dates, j'ai fait ce que tu m'as dit (clic droit sur en-tête de colonne de requête exécutée), j'obtiens bien des dates, mais pas de mémorisation du format lorsque j'exécute à nouveau la requête.


En effet... cela semble ne plus fonctionner... Cela dit je ne dispose là tout de suite que d'une version de développement.

Tu peux utiliser la formule suivante qui formatera directement au format indiqué :

Code : Tout sélectionner   AgrandirRéduire
SELECT "DateNaissance", TO_CHAR( CAST( YEAR( CURRENT_DATE ) || '-' || CASEWHEN( MONTH( "DateNaissance" ) < 10, '0' || MONTH( "DateNaissance" ), '' || MONTH( "DateNaissance" ) ) || '-' || CASEWHEN( DAY( "DateNaissance" ) < 10, '0' || DAY( "DateNaissance" ), '' || DAY( "DateNaissance" ) ) AS DATE ), 'DD MONTH YYYY' ) AS "Anniversaire" FROM "Table1"


Nota :

Re: déterminer la date d'un anniversaire

MessagePublié: 12 Juin 2011 06:46
par niala38
Pierre-Yves Samyn a écrit:Nota :
  • Je me demande pourquoi tu souhaites inclure l'année pour la date anniversaire puisqu'il semble que tu travailles avec l'année courante...
    l

Bonjour Pierre-Yves,
ça me permet de trier une table suivant la date des anniversaires, et, ainsi, dans une association, de souhaiter lors des réunions les anniversaires du mois en cours.
Merci de ton aide
Cordialement