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 :)
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
Tu dis qu'il y a des lettres
sont-elles devant, derrière ?
peut-on les ignorer ?
donne nous un exemple