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!