Question SQL

Résolu
b_medamine Messages postés 69 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 4 décembre 2007 - 29 déc. 2005 à 18:03
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 29 déc. 2005 à 19:36
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

FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
29 déc. 2005 à 18:42
"

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 ...
3
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
29 déc. 2005 à 18:14
Au lieu de mettre en varchar, tu mets en Tinyint(4) et voila :)
0
b_medamine Messages postés 69 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 4 décembre 2007
29 déc. 2005 à 18:21
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
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
29 déc. 2005 à 18:44
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
29 déc. 2005 à 18:46
Pardon, tu changes b en a et ca marchera ! (bref, tu fais ca en fonction de ta structure de table)
0
b_medamine Messages postés 69 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 4 décembre 2007
29 déc. 2005 à 19:01
Merci beaucoup. T'es fort, mais cette fois en vrai je le dis ;-)
0
FhX Messages postés 2350 Date d'inscription mercredi 13 octobre 2004 Statut Membre Dernière intervention 18 avril 2015 3
29 déc. 2005 à 19:04
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 :)
0
b_medamine Messages postés 69 Date d'inscription mardi 21 juin 2005 Statut Membre Dernière intervention 4 décembre 2007
29 déc. 2005 à 19:08
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
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
29 déc. 2005 à 19:36
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>
0
Rejoignez-nous