Vous n'êtes pas identifié(e).
Bonjour,
Je souhaite sélectionner tous les enregistrements d'une table se situant entre deux date du type énoncé dans le sujet.
je ne peux pas changer la syntaxe de ces enregistrements et dans la base le type est de forme varchar.
J'ai essayé plusieurs possibilités sans succès (en utilisant les opérateur >= et =< ainsi que la commande between), mais rien de tout ça fonctionne...
Avez vous une idée?
Cordialement,
Eric
Hors ligne
Saluton,
Je ne vois pas pourquoi
ne fournirait pas le résultat escompté.
En se rappelant que BETWEEN inclut les bornes.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Salut Majuna,
voici ma requête exacte :
elle ne me retourne rien, malgrès la présence de mes enregistrements
Cordialement,
Eric
Hors ligne
Essayes d'intervertir tes quotes. Les doubles quotes influent peut être sur l'exploitation de la date par le sgbd.
Changement effectué, rien de mieux....
Hors ligne
Toujours pas d'idée?
Hors ligne
Bonjour,
Moi je commencerais par licencier le concepteur de la base de données qui à eu l'idée (géniale? ^^) de définir des dates en varchar.
Promis, je me penche sur la question (faut dire aussi hein qu'on fait ca tous les jours )
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Re bonjour,
J'ai besoin de savoir sous quel format les dates sont stockées (jj/mm/aaaa ou aaa-mm-jj etc..., si les heures HH:mm:ss, etc... sont incluses et comment. En résumé donne moi le masque de stockage de tes dates stp.
Dernière modification par Jc (28-04-2010 23:33:36)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
>>Moi je commencerais par licencier le concepteur de la base de données qui à eu l'idée (géniale? ^^) de définir des dates en varchar.
d'accord et pas d'accord
même si elles sont stockée en varchar, sa requête doit lui ramener les bons enregistrements
a++
Hors ligne
extrait de la doc mysql :
>>SELECT 'b' BETWEEN 'a' AND 'c';
>>Ceci est équivalent à l'expression (min <= expression AND expression <= max)
a++
Hors ligne
Bonsoir,
Visiblement le problème posé n'est pas très urgent à résoudre car je n'ai toujours pas de réponse. Donc je m'en tiendrais à ça:
1) Pierrot à raison ca doit marcher, mais c'est pas du 100% car ca dépends tout de même du masque de stockage et celui de comparaison ainsi que de la plage recherché dans la comparaison.
2) Utilise la même syntaxe dans ton between que celle de stockage dans ton varchar à 100% (niveau longueur) ca augmentera tes chances de matcher à 100%.
3) donc si dans ce que tu as besoin tu as la chance que ca colle tant mieux, sinon faut utiliser CAST() et/où STR_TO_DATE() pour arriver à tes fins.*
4) Et enfin si tu n'es pas très exigeant sur les plages de valeur retournées tu peux forcer un résultat en faisant un BETWEEN 'une valeur' and now(). Ici le now() forcera la conversion implicite par le moteur de 'une valeur' en date, et si il est incorrect ou non adapté au contexte, sera considéré comme null et donc à la date origine du système de date du SGBDR.... te restera plus qu'un ORDER...ASC/DESC avec le LIMIT pour trier un peu tout ça.
5) la meilleure recommandation que je puisse te faire c'est d'utiliser le masque de date par défaut du moteur c'est à dire 2010-xx-yy (xx : mois et yy : jour) dans tes varchar, car ca optimisera tes chances de matcher sur les comparaisons chaines même partielles (du style '2010-05') car les valeurs les plus variables (jours puis mois) ne sont pas placées en début de chaine mais de façon optimisée (jours en dernier).
Bonne continuation dans la résolution de ton problème.
Dernière modification par Jc (30-04-2010 22:44:23)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
Salut,
je rentre juste de déplacement et ouahaou, qu'elle activité
le $sqlReport me donne : SELECT * FROM reports WHERE period BETWEEN '2010-04' AND '2010-12' ORDER BY period
Le concepteur c'est moi et on peut pas me viré je suis mon propre patron
à l'origine je souhaitai définir un mois, c'est pour ça que j'ai pris ce type d'enregistrement, qui me semblai sur le coup plus approprié...
la date est sous forme yyyy-mm
Merci de vous êtes tous attardé à mon soucis (qui persistent)
Hors ligne
Même problème avec
SELECT * FROM reports WHERE period BETWEEN STR_TO_DATE('2010-04') AND STR_TO_DATE('2010-12') ORDER BY period
...
Hors ligne
Bonsoir,
Oui c'est dommage, car pour un mois y a MONTH(mydate).
Par contre c'est pas comme ca que STR_TO_DATE fonctionne^^, je vous conseille d'aller lire la doc MySQL 5.x
Ca aurait été mieux de définir sous forme 'yyyy-mm-xx' mais si ca été fait sous la forme 'yyyy-mm' avec un varchar(7) normalement la requete suivante devrait fonctionner normalement avec une version de MySQL >=5.0.x
les dates 2010-04 et 2010-05 seront inclues dans les résults
Si les conditions que j'ai citées au dessus sont remplies alors la requête doit fonctionner. Si ce n'est pas le cas, le problème doit venir de votre code PHP (faites par exemple un eval() sur $_COOKIE['yearToWork'].'-'.$exerciceStartMonth pour voir ce que ca donne), et comme ont dit mes camarades, j'inverserais aussi les quotes^^.
Dernière modification par Jc (03-05-2010 00:59:58)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne
J'ai pas mal bosser avec des bases de récup sur lequel je devais agir sur la valeur avant de pouvoir l'utiliser donc au pire, pourquoi ne pas rechercher la valeur de date() correspondant à celle stockée dans la base ?? Ainsi, les opérations et ordonnancements seront à nouveau possible...
OUI, méthode de barbare, mais bon, moi j'dis ça, j'dis rien !!
MERCI de lire le mode d'emploi avant de poster !!
Hors ligne
Eh bé comme ça, ça fonctionne... Allez comprendre...
$sqlReports="SELECT * FROM reports WHERE period BETWEEN '".$periodStart."' AND '".$periodEnd."' ORDER BY period";
$reqReports = mysql_query($sqlReports) or die("Erreur SQL : ".mysql_error()."<br>Requête : ".$sqlReports);
while ($rowReports = mysql_fetch_array($reqReports)) {
//...
}
Hors ligne
C'est vrai que ce n'est pas normal que cela fonctionne quand tu met la bonne syntaxe
ce doit être un miracle
pense a faire une prière ce soir
>>le concepteur c'est moi et on peut pas me viré je suis mon propre patron
pour info, ton client peux te mettre a la porte
a++
Hors ligne
C'etait donc bien un problème de quotes
le soucis venait de votre ' devant yearToWork. Si vous aviez mis des guillemets " pour ouvrir et fermer ta chaîne vous n'auriez pas eu ce problème ou alors fallait utiliser { } pour protéger la valeur (voir autres post récents sur ce problème.
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne