Maison > base de données > tutoriel mysql > Comment puis-je trier les colonnes de chaînes avec des nombres intégrés dans SQL ?

Comment puis-je trier les colonnes de chaînes avec des nombres intégrés dans SQL ?

Linda Hamilton
Libérer: 2024-10-25 04:13:30
original
818 Les gens l'ont consulté

How Can I Sort String Columns with Embedded Numbers in SQL?

Tri des colonnes de chaînes avec des nombres intégrés dans SQL

Le tri des colonnes de chaînes contenant des nombres dans SQL peut présenter des défis. L'algorithme de tri naturel de nombreuses bases de données place les nombres dans le mauvais ordre, par exemple en plaçant « un 12 » après « un 1 ». Ce comportement est acceptable pour la plupart des applications, mais il peut s'avérer indésirable pour des besoins spécifiques.

Est-il possible de trier des colonnes de chaînes avec des nombres incorporés en utilisant du SQL pur ?

SOLUTION

En supposant que la colonne suit un modèle spécifique de « NUMÉRO d'espace MOT », l'extrait de code suivant peut être utilisé pour trier la colonne correctement :

SELECT *
FROM table
ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)
Copier après la connexion

Voici comment cela fonctionne :

  • LOCATE(' ',column) trouve la position du caractère espace dans la chaîne.
  • SUBSTRING(column,LOCATE(' ',column) 1) extrait la partie numérique de la chaîne après l'espace.
  • CAST(... AS SIGNED) convertit le nombre extrait en un entier signé pour comparaison.

PRUVE DE CONCEPT

Les exemples suivants illustrent le comportement de tri :

mysql> INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11');
mysql> SELECT * FROM t ORDER BY st;
mysql> SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED);
Copier après la connexion

La deuxième requête trie les résultats correctement, en plaçant "un 1" avant "un 12".

CONSIDERATIONS

Si le modèle de colonne diffère de "WORD space NUMBER", une solution de contournement différente peut être nécessaire.

AMÉLIORATIONS

La requête améliorée suivante ajoute un double tri pour séparer les préfixes de lettres avec des valeurs numériques :

ORDER BY SUBSTRING_INDEX(st, " ", 1) ASC, CAST(SUBSTRING_INDEX(st, " ", -1) AS SIGNED)
Copier après la connexion

Cet extrait de code modifié fournit une solution de tri plus complète.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal