Requete SQL : Suis je nulle ???

Requete SQL : Suis je nulle ??? - SQL/NoSQL - Programmation

Marsh Posté le 21-07-2003 à 19:13:39    

hello,
 
bon, ben j'espère que la réponse sera OUI, parce que là, y en a ras le bol de chercher : je comprends pas : j une table avec des stagiaires et leur date de naissance et je veux tout ceux qui sont du signe de la vierge (22 Aout - 22 Septembre). Dis comme ça , ça avait l'air simple mais ma première requete à laquelle j'avais pensé : SELECT prenom,datenaiss,sexe FROM `st_stagiaires` WHERE datenaiss>"%-08-22" AND datenaiss<"%-09-22" : elle ne marche pas. Après j essayé pleins de trucs mais j'y arrive pas !!!!!!!!!!!
 
Est ce que qqn peut m'aider ??? :cry:

Reply

Marsh Posté le 21-07-2003 à 19:13:39   

Reply

Marsh Posté le 21-07-2003 à 19:21:20    

c'est pas hyper simple comme requête.
 
Le plus simple est de ramener les dates de naissance à une année commune, puis les comparer.
 
Pour ce faire, tu auras besoin des fonctions month() day() et cdate(), je te laisse faire la requête elle-même, parceque ça ressemble plus à un sujet de TP ou autre qu'à autrechose.
 
PS: pense à utiliser une année bisextile pour l'année commune, sinon tu cours au plantage ;)


Message édité par MagicBuzz le 21-07-2003 à 19:22:10
Reply

Marsh Posté le 21-07-2003 à 19:27:41    

Stéphanie : prend un autre pseudo que le mien pour poser des questions comme ça ! Les boules !  :sweat:


Message édité par chocoboy le 21-07-2003 à 19:27:58
Reply

Marsh Posté le 21-07-2003 à 19:34:28    

bon, ben oui, désolé chocoboy ... mais là, j'en avais tellement marre  :(  
 
euh, oui, c effectivement un tp, mais c la 28ème requete, et y a pleinns de trucs bizarre ki fonctionnent pas. Je connaissais pas cdate ... peut etre que ça va m'aider.
 
merci en tout cas

Reply

Marsh Posté le 21-07-2003 à 19:38:41    

chocoboy a écrit :

Stéphanie : prend un autre pseudo que le mien pour poser des questions comme ça ! Les boules !  :sweat:


Rhô la vieille feinte pour pas se faire TT :lol: ;)
 
J'espère qu'avec les infos que je t'ai donné tu pourras résoudre ton problème. A priori, ça devrait aller tout seul, suffit de bien comprendre la bidouille que je proposé ;)

Reply

Marsh Posté le 21-07-2003 à 19:42:11    

Le plus simple eut été de stocker les dates avec un type TIMESTAMP. Les opérations avec > et < marcheront alors toutes seules.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 21-07-2003 à 19:42:35    

MagicBuzz a écrit :


Rhô la vieille feinte pour pas se faire TT :lol: ;)
 
J'espère qu'avec les infos que je t'ai donné tu pourras résoudre ton problème. A priori, ça devrait aller tout seul, suffit de bien comprendre la bidouille que je proposé ;)


 
ouinnnnnn  :cry:  c pas une feinte... c pas la première fois que ma copine me pique mon pseudo (moi j'suis plus en cours !)

Reply

Marsh Posté le 21-07-2003 à 19:43:31    

MagicBuzz a écrit :

c'est pas hyper simple comme requête.
 
Le plus simple est de ramener les dates de naissance à une année commune, puis les comparer.
 
Pour ce faire, tu auras besoin des fonctions month() day() et cdate(), je te laisse faire la requête elle-même, parceque ça ressemble plus à un sujet de TP ou autre qu'à autrechose.
 
PS: pense à utiliser une année bisextile pour l'année commune, sinon tu cours au plantage ;)


 
d'ailleurs, en passant, je crois que day() ne fonctionne pas avec MySQL, mais dayofmonth() c'est OK

Reply

Marsh Posté le 21-07-2003 à 19:45:37    

chocoboy a écrit :


d'ailleurs, en passant, je crois que day() ne fonctionne pas avec MySQL, mais dayofmonth() c'est OK


Nan mais TIMESTAMP roulèze, hein :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 21-07-2003 à 19:46:03    

Taiche a écrit :

Le plus simple eut été de stocker les dates avec un type TIMESTAMP. Les opérations avec > et < marcheront alors toutes seules.


bah je connais pas bien le timestamp, mais à priori, t'auras toujours le problème de l'année... et si tu l'as pas, alors tu perds l'info "date de naissance"

Reply

Marsh Posté le 21-07-2003 à 19:46:03   

Reply

Marsh Posté le 21-07-2003 à 19:46:43    

chocoboy a écrit :


 
d'ailleurs, en passant, je crois que day() ne fonctionne pas avec MySQL, mais dayofmonth() c'est OK


chais pas, moi j'ai vu des %, je croyais que seul Access utilisait cette syntaxe batarde :)

Reply

Marsh Posté le 21-07-2003 à 19:47:32    

MagicBuzz a écrit :


bah je connais pas bien le timestamp, mais à priori, t'auras toujours le problème de l'année... et si tu l'as pas, alors tu perds l'info "date de naissance"


Ba un timestamp c'est sous la forme YYYYMMDDHHMMSS ; genre aujourd'hui là maintenant ça fait : 20030720194725. Comme ça tu peux utiliser les opérateurs simples de comparaison sans te prendre la tête.


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 21-07-2003 à 19:52:55    

Bah c'est comme une date au format ISO grossomodo...
 
Sauf que t'as toujours à virer le facteur année, donc autant utiliser un champ standard et un raisonnement standard.
 
Car même si les fonctions "day()" ou "dayofmonth()" (d'ailleurs, à vue de nez, c'est pas la bonne fonction, ou alors elle porte un nom qui porte à confusion) ne sont pas compatibles, la transcription d'un SGBD à un autre sera implicite.
 
M'enfin ça vaut pas les fonctions de date d'Oracle, c'est encore plus simple :
 
where TO_CHAR(datenaiss, 'MMDD') between '0822' and '0922' :)

Reply

Marsh Posté le 22-07-2003 à 13:32:56    

chocoboy a écrit :

Stéphanie : prend un autre pseudo que le mien pour poser des questions comme ça ! Les boules !  :sweat:

Ben merci au moins pour le fou-rire de la journée. :D

Reply

Marsh Posté le 22-07-2003 à 17:16:19    

mysql :
SELECT prenom,datenaiss,sexe FROM `st_stagiaires` WHERE right(datenaiss,5) between "08-22" AND "09-22"


Message édité par Sebastien le 22-07-2003 à 17:17:46
Reply

Marsh Posté le 22-07-2003 à 17:19:26    

ouahou... pose ta hâche à l'entrée hein :D
 
à l'avenir, pense bien à transtyper explicitement que tu as la date formattée comme tu veux. ton truc marcheras pas si la base est paramètrée pour afficher la date au format anglais par exemple (à moins que dans MySQL ce format par défaut soit figé, ce dont je doute)

Reply

Marsh Posté le 22-07-2003 à 17:23:06    

Ben je reprends un peu la syntaxe qu'elle avait au debut donc ;)
 
Par contre pour le systeme de date sous mysql j ai jamais vu si c t possible de changer l'affichage au contraire d'oracle (putain ce qu'il m a fait chier lui avec les dates ^^)

Reply

Marsh Posté le 22-07-2003 à 17:47:47    

Pourtant, la fonction TO_CHAR permet vraiment te tout faire :)

Reply

Marsh Posté le 22-07-2003 à 17:56:55    

pour oracle
ouais surement mais quand dans mon sqlplus tout fonctionne bien, et que la meme chose en php marche pas
qu'une date en clé primaire deconne, mais la meme sans qu'elle soit clé passe, y avait de quoi se prendre la tete.
 
Mais ca a ete resolu ;-)
Monsieur DBA nous a mis la date en pur french et ca a fait du bien ^^

Reply

Marsh Posté le 22-07-2003 à 20:37:59    

Avec les fonctions MONTH() (renvoie le numéro du mois) et DAYOFMONTH() (le numéro du jour dans le mois), il doit y avoir moyen de faire quelque chose [:figti]
http://www.mysql.com/documentation [...] _functions


Message édité par mrbebert le 22-07-2003 à 20:39:02
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed