Bonjour,
On m'a confier un projet avec un base de donnée existante.
Je dois trier une colonne (de type VARCHAR) et qui contient des entiers + 1 caractère en fin.
Comment trier par exemple :
Merci1A
2
3
30E
103
123
123A
Bonjour,
On m'a confier un projet avec un base de donnée existante.
Je dois trier une colonne (de type VARCHAR) et qui contient des entiers + 1 caractère en fin.
Comment trier par exemple :
Merci1A
2
3
30E
103
123
123A
Quel SGBD ?
L'idée c'est de faire un substring du premier caractère à l'avant-dernier caractère, de convertir ceci en nombre et de trier dessus.
Il faut aussi gérer le cas où ton caractère alpha est nul.
MySQL.
Voila ce que j'ai pu sortir :
Mais je voudrais avoir ceux qui sont renseigné en premier et non pas les 0 en premier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT user_nom, CONVERT(user_parking,UNSIGNED INTEGER) AS nb, user_parking FROM `utilisateurs` ORDER BY (nb)
Par exemple :
Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 1 2 4 6 10 50 100 0 0 0 0 0 0
Ta séquence ne tient pas debout.
Soit tu as 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 50, 100
Soit tu as 100, 50, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
Voire même 1, 10, 11, 2, 20, 3, 4, 50
Mais jamais 1, 2, 3, 5, 10, 50, 0
Si tu fais ORDER BY tu peux faire :
croissant : par défaut ou ASC
décroissant : DESC
(cf l'aide sur ORDER BY)
Le zéro sera à la fin si tu utilises DESC mais l'ordre sera 100, 50, 10, 5, 3, 2, 1, 0
Si je pense qu'il y a un moyen :
Code : Sélectionner tout - Visualiser dans une fenêtre à part order by case when nb = 0 then null else nb end asc nulls last
Je connais la syntaxe d'ORDER BY mais je voulais savoir si y avait une fonction SQL qui pouvait m'aider.
Ensuite j'ai essayé de ne pas afficher le 0 mais je comprend pas pourquoi, cette requete ne fonctionne pas.
Apparemment non supporté par MySQL...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 SELECT user_nom,user_email,user_tel_interne,user_tel_externe,user_fax ,user_tel_mobile, user_commentaire, CONVERT(user_parking,UNSIGNED INTEGER) AS user_parking_entier, user_parking FROM `utilisateurs` WHERE user_parking_entier <> 0 ORDER BY (user_parking_entier)
En gardant la même logique :
Assurez-vous que 9999999 soit suffisant par rapport à vos données.
Code : Sélectionner tout - Visualiser dans une fenêtre à part order by case when user_parking_entier = 0 then 9999999 else user_parking_entier end asc
Partager