Trier des varchar contenant des chiffres

Par Gofast77, il y a 10 ans


Base de données MySQL

Bonjour,

J'ai des varchar dans lesquels je stocke des chiffres et des lettres.
Hors quand je veux les trier bah j'ai des truc comme ça :

001 002 006 075 1402 256

Mais ce n'est pas ce que je veux... Je veux que les chiffres soient classés dans l'ordre mathématique (001, 002, 006,075, 256, 1402).

Merci d'avance :)

8 réponses

Huggy, il y a 10 ans

Tu dois faire un cast

SELECT * FROM matable ORDER BY CAST(monchamp AS SIGNED)
Gofast77, il y a 10 ans

ça ne foctionne pas (j'avais déjà essayer).

Huggy, il y a 10 ans

Tu dis qu'il y a des lettres
sont-elles devant, derrière ?
peut-on les ignorer ?
donne nous un exemple

Gofast77, il y a 10 ans

Elle sont devant

Les ignorer ? C'est à dire ?

Ex : ABC001

Huggy, il y a 10 ans

Est-ce que tu veux que ABC001 soit placé comme 001 ?

Gofast77, il y a 10 ans

Oui et ABC1402 comme 1402 ;)

Huggy, il y a 10 ans

Voici une solution qui fonctionne uniquement si les lettres sont devant

SELECT champ, max(case when substr(champ, 1, 1) between '0' and '9' then champ + 0 when substr(champ, 2, 1) between '0' and '9' then substr(champ, 2) + 0 when substr(champ, 3, 1) between '0' and '9' then substr(champ, 3) + 0 when substr(champ, 4, 1) between '0' and '9' then substr(champ, 4) + 0 when substr(champ, 5, 1) between '0' and '9' then substr(champ, 5) + 0 when substr(champ, 6, 1) between '0' and '9' then substr(champ, 6) + 0 when substr(champ, 7, 1) between '0' and '9' then substr(champ, 7) + 0 when substr(champ, 8, 1) between '0' and '9' then substr(champ, 8) + 0 end) AS T FROM matable GROUP BY champ ORDER BY T;

le case va rechercher chaque caractère en partant de la gauche et s'arrète s'il a trouvé un caractère numérique
le +0 à la fin permet de transformer le résultat en numérique

GER -> NULL
09YTR -> 9
AB23 -> 23
45 -> 45
D0567 -> 567

Gofast77, il y a 10 ans

Parfait merci beaucoup :)