Maison  >  Article  >  base de données  >  Comment trier les colonnes de chaînes contenant des nombres dans SQL : gérer les zéros non significatifs et obtenir l'ordre numérique ?

Comment trier les colonnes de chaînes contenant des nombres dans SQL : gérer les zéros non significatifs et obtenir l'ordre numérique ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 01:25:02116parcourir

How to Sort String Columns Containing Numbers in SQL: Addressing Leading Zeros and Achieving Numerical Order?

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

Lorsque vous essayez de trier une colonne de chaîne contenant des valeurs numériques en utilisant l'ordre par défaut dans SQL, l'ordre naturel l'algorithme de tri peut ne pas produire les résultats souhaités. Plus précisément, les nombres avec des zéros non significatifs peuvent être placés arbitrairement par rapport à leur valeur numérique.

Pour résoudre ce problème, considérons la requête SQL suivante :

<code class="sql">SELECT *
FROM table
ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)</code>

Cette requête suppose que les données de la colonne suivent le modèle de "STRING SPACE NUMBER" et utilise la fonction SUBSTRING pour extraire la partie numérique de chaque chaîne. En convertissant la valeur extraite en un entier signé, la requête peut trier les résultats en fonction des valeurs numériques plutôt que de la représentation sous forme de chaîne.

Voici un exemple pour démontrer la fonctionnalité :

<code class="sql">INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11');
SELECT * FROM t ORDER BY st;

+----+------+
| id | st   |
+----+------+
| 1  | a 1  |
| 4  | a 11 |
| 2  | a 12 |
| 3  | a 6  |
+----+------+

SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);

+----+------+
| id | st   |
+----+------+
| 1  | a 1  |
| 3  | a 6  |
| 4  | a 11 |
| 2  | a 12 |
+----+------+</code>

Cette requête trie correctement les lignes en fonction des valeurs numériques contenues dans les chaînes. Si les données de la chaîne suivent un modèle différent, des ajustements peuvent être nécessaires pour extraire la partie numérique avec précision.

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