Est-il possible de convertir du texte en nombre dans une requête MySQL? J'ai une colonne avec un identifiant qui se compose d'un nom et d'un nombre au format "nom-numéro". La colonne est de type VARCHAR. Je veux trier les lignes en fonction du nombre (lignes avec le même nom) mais la colonne est triée selon l'ordre des caractères, c'est-à-dire
name-1
name-11
name-12
name-2
Si je coupe le nombre, puis-je convertir le nombre «varchar» en nombre «réel» et l'utiliser pour trier les lignes? Je voudrais obtenir l'ordre suivant.
name-1
name-2
name-11
name-12
Je ne peux pas représenter le nombre dans une colonne distincte.
édité 2011-05-11 9:32
J'ai trouvé la solution suivante ... ORDER BY column * 1
. Si le nom ne contient aucun nombre, est-il possible d'utiliser cette solution?
name
peut être n'importe quelle séquence de lettres.Réponses:
Cela devrait fonctionner:
la source
Vous pouvez utiliser
SUBSTRING
etCONVERT
:Où
name_column
est la colonne avec les valeurs "nom-". LeSUBSTRING
supprime tout ce qui se trouve avant le sixième caractère (c'est-à-dire le préfixe "nom-"), puisCONVERT
convertit la gauche en un entier réel.MISE À JOUR : Compte tenu de l'évolution des circonstances dans les commentaires (c'est-à-dire que le préfixe peut être n'importe quoi), vous devrez ajouter un
LOCATE
dans le mix:Cela suppose bien sûr que le préfixe non numérique ne contient aucun trait d'union, mais le commentaire pertinent dit que:
donc cela devrait être une hypothèse sûre.
la source
SUBSTRING(name_column, 6)
. Je sais, vous l'avez posté quand il ne nous l'a pas dit ...Utilisez simplement CAST,
Le type du résultat de conversion peut être l'une des valeurs suivantes:
la source
Vous pouvez utiliser CAST () pour convertir une chaîne en un entier. par exemple
SELECT CAST('123' AS INTEGER);
la source
SELECT CAST('123' AS SIGNED INTEGER);
ouSELECT CAST('123' AS UNSIGNED INTEGER);
de le faire fonctionner.la source
une manière simple SELECT '123' + 0
la source
Pour obtenir le nombre, essayez avec
SUBSTRING_INDEX(field, '-', 1)
puis convertissez.la source
si votre clé primaire est une chaîne dans un format comme
ABC / EFG / EE / 13/123 (numéro de séquence),
ce type de chaîne peut être facilement utilisé pour le tri avec le délimiteur ("/")
nous pouvons utiliser la requête suivante pour commander une table avec ce type de clé
la source
la source
Une façon générique de faire:
la source