Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/01/2007, 09h04   #1
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Par défaut [DATE] Gestion de calendrier et extraction de date

Bonjour,

Je vous avoue que je suis un peu perdu coté gestion des dates dans les requètes MySQL.....

Je souhaiterais faire deux choses, extraire des anniverssaires et des évenements.

J'ai une table Users dans laquelle est stockée la date anniversaire des membres et je souhaiterais extraire l'identifiant, le nom et le prénom des membres dont c'est l'anniverssaire.
anniv est un champ DATE.

Ce qui me donnerais quelque chose du style

Code :
1
2
 
SELECT id, lastname, firstname FROM users WHERE anniv = NOW()
Mais là je suis perdu parce que NOW() me ramene la date du jour...

Autre problème, j'ai un table Evenements ou sont stockés des évenements à venir et j'aimerais les afficher dans une page calendrier. Je souhaiterais extraire l'identifiant et le nom de l'évènement.
Mais ici le champ dateday est un TIMESTAMP

Ce qui me donnerais quelque chose du style

Code :
1
2
 
SELECT id, name FROM evenements WHERE dateday = NOW()
Mais là je suis encore perdu...

Est ce que quelqu'un pourrait me montrer la voie svp ?

Merci d'avance
@+
cadou
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 09h28   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
pour le 1er, utilise DAY et MONTH. pour l'autre, prends CURDATE au lieu de NOW.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 11h32   #3
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Hello,

c'est à dire ?
Un truc de ce style ?
(je ne suis pas chez moi donc je ne peux pas tester)

Code :
1
2
 
SELECT id, lastname, firstname FROM users WHERE DAY(anniv) = DAY(NOW()) AND MONTH(anniv) = MONTH(anniv)
Et pour le second

Code :
1
2
 
SELECT id, name FROM evenements WHERE dateday = CURDATE()
Merci d'avance pour tes eclaircissements

@+
cadou
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 17h22   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
C'est exactement ça !
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2007, 10h50   #5
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 50
Points : 18
Points : 18
Bonjour,

perso je n'arrive pas à faire fonctionner cette requête. Elle m'affiche une erreur de limite 1-30 pour les jours.
Citation:
SELECT id, lastname, firstname FROM users WHERE DAY(anniv) = DAY(NOW()) AND MONTH(anniv) = MONTH(anniv)
Toutefois si j'éxécute la recherche que sur les mois, donc:
Citation:
SELECT Nom, Prenom FROM collaborateurs WHERE MONTH(DateAnni) = MONTH(NOW())
Eh bien ça tourne...
Comment faire pour que ça aille aussi avec les jours ?

Merci pour votre aide.
skippy86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 07h03   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par skippy86
perso je n'arrive pas à faire fonctionner cette requête. Elle m'affiche une erreur de limite 1-30 pour les jours.
euh... quel est le message d'erreur exact ???
Citation:
Envoyé par skippy86
Toutefois si j'éxécute la recherche que sur les mois, donc:
Eh bien ça tourne...
Dans le premier cas, tu utilises anniv, tandis que dans le second tu prends DateAnni. Est-ce que ce ne serait pas plutôt ça le truc ? anniv est-elle vraiment une colonne de type DATE ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 10h46   #7
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 50
Points : 18
Points : 18
Salut Antoun,

avant tout je tiens à te remercier pour ton aide.
En fait le message d'erreur m'indique seulement les limites.. 1-30. Donc je penses avoir une erreur sur les jours mais je ne comprends pas pourquoi.

Mon champ se nomme "DateAnni" et "anniv" était la requête citée plus haut dans les post.

Mon erreur est la suivante:
Citation:
Erreur

requête SQL :

SELECT Nom, Prenom FROM collaborateurs WHERE DAY(DateAnni) = DAY(NOW()) AND MONTH(DateAnni) = MONTH(NOW()) LIMIT 0, 30

MySQL a répondu:

Something is wrong in your syntax près de '(DateAnni) = DAY(NOW()) AND MONTH(DateAnni) = MONTH(NOW()) LIMIT' à la ligne 1
Bizarre non, pourtant je compare bien le champ "DateAnni" à la valeur "NOW()" ....

Merci pour ton aide.
a+
skippy86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 11h34   #8
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 29
Points : 16
Points : 16
Citation:
Salut Antoun,

avant tout je tiens à te remercier pour ton aide.
En fait le message d'erreur m'indique seulement les limites.. 1-30. Donc je penses avoir une erreur sur les jours mais je ne comprends pas pourquoi.

Mon champ se nomme "DateAnni" et "anniv" était la requête citée plus haut dans les post.

Mon erreur est la suivante:
Citation:
Erreur

requête SQL :

SELECT Nom, Prenom FROM collaborateurs WHERE DAY(DateAnni) = DAY(NOW()) AND MONTH(DateAnni) = MONTH(NOW()) LIMIT 0, 30

MySQL a répondu:

Something is wrong in your syntax près de '(DateAnni) = DAY(NOW()) AND MONTH(DateAnni) = MONTH(NOW()) LIMIT' à la ligne 1
Bizarre non, pourtant je compare bien le champ "DateAnni" à la valeur "NOW()" ....

Merci pour ton aide.
a+
En fait, elle est comment ta base de données, c'est la même qu'au premier post ?
Tu pourrais mettre les tables complètes qui nous interessent pour ton problème ? Je n'arrive pas à voir ton problème sans voir le format de la base...
didlette62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 14h58   #9
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 50
Points : 18
Points : 18
Citation:
En fait, elle est comment ta base de données, c'est la même qu'au premier post ?
Tu pourrais mettre les tables complètes qui nous interessent pour ton problème ? Je n'arrive pas à voir ton problème sans voir le format de la base...
Hep,

ben je ne suis pas chez moi donc je peux t'énumérer mes champs mais je ne peux faire un print-screen.
Les infos sont les suivantes:
Table: collaborateurs
Champs:
- NoCollaborateur
- Nom
- Prenom
- Rue
- IDLocalite
- NoMobile
- DateAnni (champ au format DATE)

Pis j'aimerais donc sortir tous les collaborateurs dont la date d'anniversaire est = NOW()
Je voudrais afficher un truc du genre pour que les gens sur l'intranet voient qui a son anniversaire:
Citation:
SELECT Nom, Prenom FROM collaborateurs WHERE .....
Merci pour votre aide.
skippy86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 15h07   #10
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
Bonjour,

Quelle est la version de MySQL ? Il y a une limitation sur la version.

Référence
__________________
Pensez au tag
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 20h57   #11
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 50
Points : 18
Points : 18
je suis en MYSQL version 1.6

je ne sais toujours pas comment attaquer ce problème...
merci d'avance
skippy86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 21h26   #12
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
essaie DAYOFMONTH à la place de DAY
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2007, 23h54   #13
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 50
Points : 18
Points : 18
arf je viens fou je n'arrive toujours pas à faire cette requête...
Je viens de me faire quelques recherches sur google et je crois vraiment être maudit...
Impossible de trouver la bonne formule.

Je vais aller me coucher peut-être trouverais-je une solution pendant mon sommeil.
Si vous aussi, tenez-moi au courant.

@+
skippy86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2007, 09h05   #14
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
tu as vraiment une version 1.6 ??? tu ne confonds pas avec la version de phpMyAdmin ?

que te donnent chacune des requêtes suivantes ?
Code :
1
2
3
4
5
6
 
SELECT VERSION() ;
SELECT DAYOFMONTH(NOW()) ;
SELECT CURDATE() ;
SELECT SUBSTRING('abc', 2, 1) ;
SELECT SUBSTRING(NOW(), 6, 2) ;
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2007, 22h16   #15
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 50
Points : 18
Points : 18
Bonsoir Antoun,

désolé du retard, mais étant aux études (économie) et que j'ai les examens semestriels cette semaine je n'ai pas eu le temps de te répondre avant.

J'ai bien essaillé les fonctions SELECT que tu m'as données..
voici les resultats
Citation:
VERSION()
3.23.49-max-nt

DAYOFMONTH(NOW())
16

CURDATE()
2007-01-16

SUBSTRING('abc', 2, 1)
b


SUBSTRING(NOW(), 6, 2)
01
Je ne comprends pas le dernier Substring personellement

Merci pour ton aide.
a+
skippy86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 07h12   #16
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Donc, tu es en MySQL 3.23 (je suppose que 1.6 doit être ta version de phpMyAdmin ou de EasyPHP).

Tu ne peux donc pas utiliser DAY(), qui n'a été ajouté qu'en version 4.1.1, comme indiqué par Adjanakis. La bonne nouvelle c'est que DAY() n'est qu'un alias de DAYOFMONTH(), qui fonctionne chez toi.

Cela te donne donc :

Code :
1
2
3
4
SELECT Nom, Prenom 
FROM collaborateurs 
WHERE DAYOFMONTH(DateAnni) = DAYOFMONTH(NOW()) 
  AND MONTH(DateAnni) = MONTH(NOW())
Comme ce qui t'intéresse c'est la date seule et non l'heure, tu peux aussi utiliser CURDATE() à la place de NOW(), ce sera microscopiquement plus rapide.

Quant à mon second SUBSTRING, il extrait les 6ème et 7ème caractères d'une date au format '2007-01-16'. C'était une roue de secours au cas où DAYOFMONTH() n'aurait pas fonctionné dans ta version.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 12h46   #17
Membre Expert
 
Avatar de Adjanakis
 
Inscription : avril 2004
Messages : 734
Détails du profil
Informations personnelles :
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations forums :
Inscription : avril 2004
Messages : 734
Points : 1 281
Points : 1 281
???
__________________
Pensez au tag
Adjanakis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2007, 21h23   #18
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 50
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 50
Points : 18
Points : 18
Bonsoir à tous,

je tenais à vous remercier c'est bon ça fonctionne.

@Antoun
Merci tu avais raison c'était un problème de version MySQL....
A présent, tout fonctionne

Meilleures salutations
skippy86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h32.


 
 
 
 
Partenaires

Hébergement Web