SQL trier des nombres "logiquement" [Résolu/Fermé]

Signaler
-
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
-
Bonjour,

Une question toute simple dont je n'ai pas la réponse ;)

J'ai une table :
ID | Dept | Nom
1 | 1 | Ain
2 | 58 | Nièvre
3 | 10 | Aube
4 | 2 | Aisne


Quand je fais un ORDER BY Dept, j'ai
ID | Dept | Nom
1 | 1 | Ain
3 | 10 | Aube
4 | 2 | Aisne
2 | 58 | Nièvre

Alors que j'ai besoin de :
ID | Dept | Nom
1 | 1 | Ain
4 | 2 | Aisne
3 | 10 | Aube
2 | 58 | Nièvre

Comment faire pour trier de la bonne manière ?

Merci de votre aide

Vincent

5 réponses

Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 326
Bonjour Vincent,

En fait tu ne peux pas convertir ta colonne vers un nombre car elle contient parfois des lettres, par contre le code suivant devrait faire ce que tu veux
SELECT id , Dept, Nom
FROM nomdetatable
ORDER BY LPAD(Dept,2,'00')

L'instruction LPAD va rajouter un ou deux zéros ou aucun devant la variable Dept
Exemple:
Dept = 1 , LPAD(Dept,2,'00') = 01
Dept = 10 , LPAD(Dept,2,'00') = 10

A plus
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 326
Bonjour,

Avant de pouvoir t'aider, j'ai besoin de deux petits renseignements:
1°) Quelle base de données utilises-tu ? (Mysql , Access, Sql Server, ....)
2°) De quel type est la colonne Dept ? (Numérique, Caractère , ...)
Merci et a plus
Bonjour

Tu as sûrement défini ton champ Dept comme étant un type texte, et tu veux le trier comme numérique.
Tu peux modifier son type qpour qu'il soit numérique (ce qui semble plus logique, mais peut avoir des conséquences ailleurs dans ton application) ou forcer explicitement la manière de trier :
ORDER BY CAST (`Dept` AS UNSIGNED)
Re ;)

Merci de vos réponses !

Christounet : j'utilise mysql et le champ est texte à cause de la corse (2A et 2B).

Toto : Sql me renvoie une erreur avec "UNSIGNED".

Vous y voyez plus clair ???

Vincent
Et Dieu créa Christounet !

Bravo, ca marche nickel, merci !
Messages postés
1263
Date d'inscription
mercredi 26 septembre 2007
Statut
Membre
Dernière intervention
29 juillet 2010
1 326
Bonjour Vincent,
Bien content pour toi que cela fonctionne.
Très bonne journée et à plus