Maison  >  Article  >  base de données  >  Comment trier les colonnes de chaînes contenant des nombres par ordre croissant dans MySQL ?

Comment trier les colonnes de chaînes contenant des nombres par ordre croissant dans MySQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 16:07:29541parcourir

How to Sort String Columns Containing Numbers in Ascending Order in MySQL?

Tri des colonnes de chaînes contenant des nombres dans SQL

Lors du tri des colonnes de chaînes contenant des nombres, l'algorithme de tri MySQL par défaut place les nombres après les lettres. Ce n'est pas toujours le comportement souhaité.

Problème :

Trier la colonne de chaîne suivante contenant des nombres par ordre croissant :

name
a 1
a 12
a 2
a 3

Le attendu le résultat est :

name
a 1
a 2
a 3
a 12

Solution avec SQL :

En supposant que le modèle de colonne est toujours « NUMÉRO d'espace MOT », la requête SQL suivante peut être utilisée :

<code class="sql">SELECT *
FROM table
ORDER BY CAST(SUBSTRING(column, LOCATE(' ', column) + 1) AS SIGNED);</code>
  • CAST() : Convertit la sous-chaîne (numéro) en une valeur numérique.
  • LOCATE(' ', colonne) : Trouve la position du caractère espace.
  • SUBSTRING() : Extrait la sous-chaîne contenant le numéro.

Alternativement, avec SUBSTRING_INDEX :

<code class="sql">ORDER BY SUBSTRING_INDEX(column, " ", 1) ASC, CAST(SUBSTRING_INDEX(column, " ", -1) AS SIGNED);</code>

Cette requête utilise SUBSTRING_INDEX pour extraire séparément les parties de mots et de chiffres de la chaîne et les trie en conséquence.

Explication :

Cette solution repose sur le fait que la sous-chaîne après le caractère espace dans la chaîne contient toujours le nombre. En convertissant cette sous-chaîne en valeur numérique, nous pouvons trier la colonne numériquement, en ignorant le préfixe de la lettre.

Remarque :

Si la colonne de chaîne ne suit pas le " "WORD space NUMBER", des fonctions de logique ou de manipulation de chaîne supplémentaires peuvent être nécessaires pour obtenir le résultat de tri souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn