Commande MySQL par chaîne avec des nombres
J'ai des chaînes de caractères comme M1 M3 M4 M14 M30 M40
etc (vraiment tout int 2-3 chiffres après la lettre)
Quand je fais "ORDER BY nom" cela renvoie:
M1, M14, M3, M30, M4, M40
Quand je veux:
M1, M3, M4, M14, M30, M40
Son traitement de la chose comme un string, mais j'ai envie de le traiter comme une chaîne de caractères + int
Des idées?
source d'informationauteur Adam Esterle
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser SUBSTR et JETÉ COMME non signé/SIGNED dans l'ORDRE PAR:
Si il peut y avoir plusieurs personnages au début de la chaîne, par exemple comme
'M10', 'MTR10', 'ABCD50', 'JL8', etc...
vous avez essentiellement à obtenir le sous-chaîne de caractères du nom de la première position d'un nombre.Malheureusement MySQL ne prend pas en charge ce genre de REGEXP opération (seulement une valeur booléenne est retourné, pas le match).
Vous pouvez utiliser cette solution pour émuler:
Ce sera de l'ordre par le personnage de la chaîne d'abord, puis l'extrait numéro de la partie de la chaîne, tant qu'il y a <=7 caractères au début de la chaîne. Si vous avez besoin de plus, vous pouvez simplement de la chaîne d'supplémentaire
WHEN
s à laCASE
déclaration.Je ne pouvais pas obtenir ce travail pour ma question qui était de tri de la MLS de tels Chiffres ci-dessous:
V12345
V1000000
V92832
Le problème a été V1000000 n'était pas plus valorisée que le reste, même si c'est plus grand.
L'utilisation de ce a résolu mon problème:
Juste enlevé le
SUBSTR(col_name FROM 1 FOR 1)
Vous pouvez utiliser:
Diviser des chiffres et des lettres séparément.
Essayez de supprimer le personnage avec SUBSTR. Ensuite, utilisez ABS pour obtenir la valeur absolue de champ: