Question SQL [Résolu]

Signaler
Messages postés
69
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
4 décembre 2007
-
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour,



J'ai un champ dans une table SQL de type varchar. ça dépend de la
valeur d'un autre champ, il est soit une chaine de carcatère soit une
valeur numérique.



Lorsque je fais une sélection en ordre croissant de mes valeurs numérique, j'obtiens comme exemple la suite suivante :



| 1045 |

| 1049 |

| 105 |

| 1050 |

| 1055 |

| 106 |

| 1060 |

| 1070 |

| 1080 |

| 1084 |

| 1085 |

| 1088 |

| 1090 |

| 1091 |

| 1092 |

| 11 |

| 110 |

| 1108 |

| 1109 |

| 1110



alors que la liste doit commencer par 11..... Y a t-il un moyen que je
convertit ma chaine de caractère en valeur numérique et avoir le bon
ordre. Merci

9 réponses

Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
"

Trés fort que tu es !!!" Merci :o

Est ce que tu te mets à refléchir des fois ??!!!
Si tu utilises un champ de type varchar, alors l'ordre chronologique est fait en fonction du code ASCII des caractères !!!

Donc, ordre normal :
a
b
c
d

et avec les chiffres :
1
11
2
21
22
221
etc...

Si tu met en INT, t'as pas ce problème la... mais bon, t'as l'air mieux renseigné que moi sur la chose on dirait :o

Maintenant, t'as le choix de faire autre chose (mais vraiment t'as le choix, je te force pas !)

SELECT b FROM t ORDER BY CAST( b as UNSIGNED ); // Ou SIGNED si tu utilises des nombres négatifs.

Regarde ...
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Au lieu de mettre en varchar, tu mets en Tinyint(4) et voila :)
Messages postés
69
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
4 décembre 2007

Trés fort que tu es !!!



Si j'ai mis en varchar, c'est que j'ai mes raisons ... Et je ne suis
pas si con pour poser telles questions.... Voilà un petit détail pour
comprendre la problématique



table T( a int, b varchar(50));



si a in '1,4,5,7,9' par exemple, b est une valeur numérique

si a in '2,3,6,8,10' par exemple, b est une chaine de caractère ....



Prière de ne pas me proposez autres solutions sur la structure de table, puisque ce n'est pas ce que je cherche....



J'ai essayé avec cette requete, mais g eu un ordre en binaire ....



select cast(a as sunigned) from T order by a asc;



mais g eu les résultats ci dessus.



Quelqu'un pour m'aider
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Sinon, tu peux utiliser CONVERT() pour la conversion de type ...

SELECT b FROM t ORDER BY CONVERT( b USING UNSIGNED );

Maintenant c'est toi qui voit... mais avant de dire que je dis n'importe quoi, merci de bien préciser ce que tu souhaites la prochaine fois.
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Pardon, tu changes b en a et ca marchera ! (bref, tu fais ca en fonction de ta structure de table)
Messages postés
69
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
4 décembre 2007

Merci beaucoup. T'es fort, mais cette fois en vrai je le dis ;-)
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Bah en faite, j'étais pas si sur que ca de mon coup ==>
Un coup à la doc de mysql et comme ca, plus de soucis sur le problème :)
Messages postés
69
Date d'inscription
mardi 21 juin 2005
Statut
Membre
Dernière intervention
4 décembre 2007

j'avais regardé la doc, et g à peu prêt écrit la même requete sauf au
lieu de passer le cast jusqu'à la fin, moi je le mettai au début juste
après le select, et d'un coup je me suis dis que ça ne marchera peut
être pas.



EZn plus des tâches que j'ai pr le moment, je ne trouve pas assez de temps pr se conbcentrer sur la chose.



merci une deuxième fois
Messages postés
9433
Date d'inscription
mardi 9 octobre 2001
Statut
Membre
Dernière intervention
13 avril 2007
9
Salut,

"t je ne suis pas si con pour poser telles questions"

hum...

<hr size="2" width="100%"><li>Entraide, dépannage et vulgarisation informatique : Mon site de vulgarisation informatique</li><li>Codes-php.net</li>