Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1323 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU]Requete sql : comparaison chaine

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU]Requete sql : comparaison chaine

n°2057748
Inject
Posté le 18-02-2011 à 11:55:18  profilanswer
 

Bonjour à tous.  :)  
Alors voila, j'ai un soucis avec une comparaison de chaine...
 
En fait je dois comparer des dates qui sont au format chaines dans la base de donnée sous forme jjmmaa. Disons que ce champ s'apelle date1
Moi on me donne une date du style "2007" et avec ça je dois récupérer toutes les personnes  dont date1 est compris entre le 1er septembre 2008 et le 31 aout 2009.
 
Et là je suis en train de m'arracher les cheveux sur ce truc qui doit pourtant être con... Enfin je l'espère.
 
Ma requête ressemble plus ou moins à ça pour le moment mais j'ai tout essayé et rien ne marche !  :pt1cable:  
 
SELECT * FROM `personne` where  date1 LIKE "__[09-12]07" or date1 LIKE "__[01-08]08"  ;
 
Je ne peux pas convertir le champs en date c'est dans le cadre d'un stage et je ne peux pas toucher à la structure de la BDD donc bon... J'essaye de faire avec. Bien évidemment la date 2008 est en fait uen variable mais ça ce n'est pas un problème, juste si quelqu'un pouvait m'aider pour cette foutu requête  :o  Je vous en serait très reconnaissant, merci !


Message édité par Inject le 18-02-2011 à 15:55:56
mood
Publicité
Posté le 18-02-2011 à 11:55:18  profilanswer
 

n°2057751
skeye
Posté le 18-02-2011 à 12:01:03  profilanswer
 

Convertis-les à la volée dans ta requête pour simplifier la comparaison...
Quel sgbd? Par exemple sous oracle tu as to_date() pour faire ça.


---------------
Can't buy what I want because it's free -
n°2057753
Inject
Posté le 18-02-2011 à 12:03:34  profilanswer
 

Je bosse sous oracle/php/mysql.
Les convertir à la volée c'est à dire ?  Récupérer tout sans distinction et ensuite faire mes comparaisons et mon tri ?  Il n'y a aucun moyen de faire ça directement dans la requête ?

n°2057754
skeye
Posté le 18-02-2011 à 12:05:46  profilanswer
 

Inject a écrit :

Je bosse sous oracle/php/mysql.
Les convertir à la volée c'est à dire ?  Récupérer tout sans distinction et ensuite faire mes comparaisons et mon tri ?  Il n'y a aucun moyen de faire ça directement dans la requête ?


 
Sous oracle, tu peux faire ça pour convertir la chaine de caractères '01/01/1990' en la date en question :

Code :
  1. SELECT to_date('01/01/1990', 'DD/MM/YYYY') FROM dual;


 
Tu dois pouvoir adapter ta requête pour utiliser ce genre de fonctions et ainsi comparer des dates plutôt que des chaines de caractères.


---------------
Can't buy what I want because it's free -
n°2057757
Inject
Posté le 18-02-2011 à 12:11:34  profilanswer
 

Mh après essai j'ai l'erreur comme quoi la fonction n'existe pas...  
En effet erreur de ma part j'bosse sous Oracle chez moi mais ici je suis sous Apache, suis-je bête ><

n°2057758
skeye
Posté le 18-02-2011 à 12:12:14  profilanswer
 

euh apache c'est pas une base de données...[:pingouino]
mysql, j'imagine?
http://dev.mysql.com/doc/refman/5. [...] tions.html


Message édité par skeye le 18-02-2011 à 12:12:44

---------------
Can't buy what I want because it's free -
n°2057759
Inject
Posté le 18-02-2011 à 12:12:56  profilanswer
 

Oui c'est ça *a du mal ce midi*
je teste ça et je te tiens au courant, merci =)


Message édité par Inject le 18-02-2011 à 12:13:43
n°2057761
skeye
Posté le 18-02-2011 à 12:13:39  profilanswer
 

cf le lien que je t'ai donné - str_to_date.


Message édité par skeye le 18-02-2011 à 12:13:44

---------------
Can't buy what I want because it's free -
n°2057762
Inject
Posté le 18-02-2011 à 12:21:52  profilanswer
 

Donc en gros maintenant ma requête en version simplifiée ressemble à un truc comme ça :  
 
SELECT * FROM `personne` where  STR_TO_DATE('date1', GET_FORMAT(DATE, 'EUR')) < "31.08.09"
 
Sauf qu'elle ne me renvoi aucun enregistrement ce qui n'est pas normal  :pt1cable:  
Enfin je vais fouiller de ce coté là je te remercie pour ton aide... faut que j'arrive à voir où cloche exactement la comparaison ><

n°2057769
rufo
Pas me confondre avec Lycos!
Posté le 18-02-2011 à 12:55:54  profilanswer
 

à la place de "31.08.09", tu devrais pas plutôt mettre "31.08.2009" vue que STR_TO_DATE convertit en date et get_format(..., 'EUR') utilise %Y pour l'année, représentée sur 4 chiffres?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 18-02-2011 à 12:55:54  profilanswer
 

n°2057776
Inject
Posté le 18-02-2011 à 13:12:13  profilanswer
 

En effet je n'avais pas fait attention à ce détail mais même après modification il me renvoi toujours un réponse vide... je suis partie sur un autre problème histoire de laisser un peu celui là de coté le temps que ça refroidisse mais si vous avez des pistes je ne dis pas non =)

n°2057833
Inject
Posté le 18-02-2011 à 15:28:50  profilanswer
 

Bon je reviens vers vous parce que je n'arrive décidément pas à trouver de solutions à cette chose et je suis en train de m'arracher les cheveux dessus ! J'aimerais pouvoir trouve rune solution avant le week-end, quelqu'un aurait une idée ?  

Code :
  1. SELECT * FROM `personne` where  STR_TO_DATE('date1', GET_FORMAT(DATE, 'EUR')) < "31.08.2009"


 
Cette requête refuse de marcher... Je vous met quelques exemples que j'ai comme valeur de champs dan sma base de données pour vous donner un aperçu :  
 
 
211209 , 011009 , 020508 , 020511 , 020310.... etc
 
Donc elle est bien censée m'afficher quelque chose mais nada ! :??:


Message édité par Inject le 18-02-2011 à 16:00:57
n°2057839
skeye
Posté le 18-02-2011 à 15:31:53  profilanswer
 

Les guillemets en sql ça existe pas, chez moi. Et au mieux ça délimiterait une chaine, pas une date.:o


---------------
Can't buy what I want because it's free -
n°2057841
Inject
Posté le 18-02-2011 à 15:34:33  profilanswer
 

Au niveau de la date à la fin ? Le truc c'est que si je ne les met pas j'ai une magnifique erreur sql ... Comme quoi j'ai une erreur de syntaxe près de .2009
Et chose étrange à la place de m'afficher la requête (qui s'affiche normalement en cas d'erreur), il ne m'affiche que "s" ...  
 
Alors que quand je met les guillements ça marche nicquel (à part les enregistrements inexistants bien sûr)

n°2057846
rufo
Pas me confondre avec Lycos!
Posté le 18-02-2011 à 15:37:22  profilanswer
 

skeye a écrit :

Les guillemets en sql ça existe pas, chez moi. Et au mieux ça délimiterait une chaine, pas une date.:o


 
sous mysql, faut mettre les dates entre quotes pour que ça marche...  :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2057848
skeye
Posté le 18-02-2011 à 15:40:06  profilanswer
 

Inject a écrit :

Au niveau de la date à la fin ? Le truc c'est que si je ne les met pas j'ai une magnifique erreur sql ... Comme quoi j'ai une erreur de syntaxe près de .2009
Et chose étrange à la place de m'afficher la requête (qui s'affiche normalement en cas d'erreur), il ne m'affiche que "s" ...

 

Alors que quand je met les guillements ça marche nicquel (à part les enregistrements inexistants bien sûr)

 

Déjà tu formates en format EUR, alors que d'après la doc, c'est du '%d.%m.%Y', et que tu as du '%d-%m-%Y'...et une chaine en sqkl c'est délimité par des simple quotes.

 
Code :
  1. SELECT * FROM `personne` WHERE  STR_TO_DATE(date1, '%d-%m-%Y') < str_to_date('31.08.2009', '%d.%m.%Y')


Message édité par skeye le 18-02-2011 à 15:40:36

---------------
Can't buy what I want because it's free -
n°2057851
Inject
Posté le 18-02-2011 à 15:40:50  profilanswer
 

J'ai peut-être eu un problème de compréhension avec la fonctions STR_TO_DATE c'est fort possible... mettre le champ 'date1' comme marche-t-il vraiment ? Sachant que le format du camp est jjmmaa ?

n°2057852
skeye
Posté le 18-02-2011 à 15:41:14  profilanswer
 

...et d'ailleurs tu passes la chaine 'date1' à str_to_date dans ta requête...ça risque pas de marcher.


---------------
Can't buy what I want because it's free -
n°2057853
skeye
Posté le 18-02-2011 à 15:42:09  profilanswer
 

Inject a écrit :

J'ai peut-être eu un problème de compréhension avec la fonctions STR_TO_DATE c'est fort possible... mettre le champ 'date1' comme marche-t-il vraiment ? Sachant que le format du camp est jjmmaa ?


ça marche à condition d'adapter au format! c'est jj-mm-aaaa ou jjmmaa, au final???


---------------
Can't buy what I want because it's free -
n°2057855
Inject
Posté le 18-02-2011 à 15:43:23  profilanswer
 

Le format est bien jjmmaa...
je dois donc mettre %d%m%Y ?

n°2057858
skeye
Posté le 18-02-2011 à 15:46:01  profilanswer
 

Lis la doc, là. On t'a déjà bien mâché le travail.


---------------
Can't buy what I want because it's free -
n°2057866
Inject
Posté le 18-02-2011 à 15:55:33  profilanswer
 

Je vous remercie ça marche ! Je marque le sujet comme résolu =)

n°2057914
couak
Posté le 18-02-2011 à 20:49:55  profilanswer
 

ca va marcher un temps, si tu commences à avoir beaucoup de lignes dans ta table, bonjour les problèmes de performance à cause d'un balayage complet de table....
 
Le mieux est de refaire la colonne avec un type date, et de l'indexer
Au pire sous Oracle tu fais un index calculé

n°2057968
Inject
Posté le 19-02-2011 à 08:51:10  profilanswer
 

Comme je le disais dans mon premier poste je ne peux pas toucher à la structure de la table et je dois travailler sur quelque chose de pré-existant en me débrouillant pour ce genre de problèmes...
Après ça ne relève plus de mon autorité je leur avait demandé s'il était possible de convertir tous les champs date qui sont pour le moment en string en vrai champs date mais ils ont refusés...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [RESOLU]Requete sql : comparaison chaine

 

Sujets relatifs
RESOLU [Access 2003] Requête jointure et union[SQL] requete: combler les "vides" dans une table avec des donnees
probleme de comparaisonRequête PDO Statement
requete sqlrequete SQL qui ne donne pas le bon resultat
Problème comparaison de dateRequete de modification
chercher mail dans une chaine de caractère en phpChaine de caractere java
Plus de sujets relatifs à : [RESOLU]Requete sql : comparaison chaine


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR