[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.
niala38
NéOOphyte
NéOOphyte
Messages : 75
Inscription : 18 avr. 2011 14:02

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

Message 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
Pièces jointes
anniversaire.odb
(4.12 Kio) Téléchargé 210 fois
Dernière modification par niala38 le 20 juin 2011 22:50, modifié 1 fois.
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
Avatar de l’utilisateur
spYre
InconditiOOnnel
InconditiOOnnel
Messages : 888
Inscription : 29 oct. 2008 20:02
Localisation : Liège, Belgique

Re: déterminer la date d'un anniversaire

Message 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

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é 204 fois
LibreOffice 3.3.4 + Report Builder
Windows 7 / Windows XP sp3
Ubuntu 11.10 / LMDE
niala38
NéOOphyte
NéOOphyte
Messages : 75
Inscription : 18 avr. 2011 14:02

Re: déterminer la date d'un anniversaire

Message 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
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: déterminer la date d'un anniversaire

Message 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 : http://user.services.openoffice.org/fr/ ... 43#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) : http://user.services.openoffice.org/fr/ ... 543#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é...
niala38
NéOOphyte
NéOOphyte
Messages : 75
Inscription : 18 avr. 2011 14:02

Re: déterminer la date d'un anniversaire

Message 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
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

Re: déterminer la date d'un anniversaire

Message 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

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 :
niala38
NéOOphyte
NéOOphyte
Messages : 75
Inscription : 18 avr. 2011 14:02

Re: déterminer la date d'un anniversaire

Message 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
Dernière modification par Oukcha le 12 juin 2011 10:10, modifié 1 fois.
Raison : Correction balise [quote]
libreoffice 3.6.1 sous windows7
mammifère Oomnivore
Verrouillé