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
[Résolu] déterminer la date d'un anniversaire
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.
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.
-
- NéOOphyte
- Messages : 75
- Inscription : 18 avr. 2011 12:02
[Résolu] déterminer la date d'un anniversaire
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par niala38 le 20 juin 2011 20:50, modifié 1 fois.
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
mammifère Oomnivore
-
- InconditiOOnnel
- Messages : 888
- Inscription : 29 oct. 2008 19:02
- Localisation : Liège, Belgique
Re: déterminer la date d'un anniversaire
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 :
Pour plus d'informations : suivre le Guide de l'utilisateur HSQL... épinglé en tête de la section Base de données .
Cordialement.
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
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"
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
-
- NéOOphyte
- Messages : 75
- Inscription : 18 avr. 2011 12:02
Re: déterminer la date d'un anniversaire
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
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
mammifère Oomnivore
-
- Grand Maître de l'OOffice
- Messages : 11276
- Inscription : 02 mai 2006 08:42
Re: déterminer la date d'un anniversaire
Bonjour
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é...
Tu as aussi le fil épinglé en tête de cette section du forum : "techniques pour débuter avec en particulier : http://user.services.openoffice.org/fr/ ... 43#p127981niala38 a écrit :De manière plus générale, où peut-on trouver la liste des fonctions autorisées ?
Là encore tu peux trouver par exemple (toujours dans le même fil) : http://user.services.openoffice.org/fr/ ... 543#p81847niala38 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 ?
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é...
-
- NéOOphyte
- Messages : 75
- Inscription : 18 avr. 2011 12:02
Re: déterminer la date d'un anniversaire
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
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
mammifère Oomnivore
-
- Grand Maître de l'OOffice
- Messages : 11276
- Inscription : 02 mai 2006 08:42
Re: déterminer la date d'un anniversaire
En effet... cela semble ne plus fonctionner... Cela dit je ne dispose là tout de suite que d'une version de développement.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.
Tu peux utiliser la formule suivante qui formatera directement au format indiqué :
Code : Tout sélectionner
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"
- 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...
- Lien vers la documentation "source" : http://hsqldb.org/doc/2.0/guide/builtin ... chapt.html
-
- NéOOphyte
- Messages : 75
- Inscription : 18 avr. 2011 12:02
Re: déterminer la date d'un anniversaire
Bonjour Pierre-Yves,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
ç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 modification par Oukcha le 12 juin 2011 08:10, modifié 1 fois.
Raison : Correction balise [quote]
Raison : Correction balise [quote]
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
mammifère Oomnivore