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

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur: Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.

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

Messagepar niala38 » 13 Mai 2011 17:59

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
Pièces jointes
anniversaire.odb
(4.12 Kio) Téléchargé 87 fois
Dernière édition par niala38 le 20 Juin 2011 21:50, édité 1 fois.
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
niala38
NéOOphyte
NéOOphyte
 
Message(s) : 75
Inscrit le : 18 Avr 2011 13:02

Re: déterminer la date d'un anniversaire

Messagepar spYre » 13 Mai 2011 20:20

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.
Pièces jointes
anniversaire.odb
(4.11 Kio) Téléchargé 78 fois
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
 
Message(s) : 888
Inscrit le : 29 Oct 2008 20:02
Localisation : Liège, Belgique

Re: déterminer la date d'un anniversaire

Messagepar niala38 » 14 Mai 2011 03:54

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
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
niala38
NéOOphyte
NéOOphyte
 
Message(s) : 75
Inscrit le : 18 Avr 2011 13:02

Re: déterminer la date d'un anniversaire

Messagepar Pierre-Yves Samyn » 14 Mai 2011 08:54

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é...
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Re: déterminer la date d'un anniversaire

Messagepar niala38 » 14 Mai 2011 14:10

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
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
niala38
NéOOphyte
NéOOphyte
 
Message(s) : 75
Inscrit le : 18 Avr 2011 13:02

Re: déterminer la date d'un anniversaire

Messagepar Pierre-Yves Samyn » 15 Mai 2011 07:43

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 :
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Re: déterminer la date d'un anniversaire

Messagepar niala38 » 12 Juin 2011 06:46

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
Dernière édition par Oukcha le 12 Juin 2011 09:10, édité 1 fois.
Raison: Correction balise [quote]
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
niala38
NéOOphyte
NéOOphyte
 
Message(s) : 75
Inscrit le : 18 Avr 2011 13:02


Retour vers Base de données

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)