Bien que cette question soit spécifique à SQL Server et que cette réponse ne le soit pas, je pensais que je devrais toujours publier ces informations simplement pour en faire prendre conscience et ne pas être en opposition avec les autres réponses.
Cela dit, en dehors de SQL Server, dans certains environnements, il est possible de faire ce type de tri. C'est quelque chose qui est au moins spécifié dans la documentation Unicode. Dans la norme / le rapport UNICODE LOCALE DATA MARKUP LANGUAGE (LDML) PART 5: COLLATION , il existe un graphique pour les paramètres de classement qui décrit diverses options pour personnaliser le comportement de tri. L'une des options est -kn-true
ou [numericOrdering on]
:
Si la valeur est sur , toute séquence de chiffres décimal (General_Category = Nd dans le [ UAX44 est trié à un niveau primaire avec sa valeur numérique]). Par exemple, "A-21" <"A-123". Les poids primaires calculés sont tous au début du groupe de réorganisation des chiffres . Ainsi, avec une table UCA non mise en mémoire, "a $" <"a0" <"a2" <"a12" <"a⓪" <"aa".
Cependant, ce document est une "norme technique" et ne fait pas partie de la spécification Unicode de base. Une note en haut du document indique:
Une norme technique Unicode (UTS) est une spécification indépendante. La conformité à la norme Unicode n'implique pas la conformité à un UTS.
Par conséquent, ce comportement particulier n'est pas disponible dans SQL Server ou même dans .NET (du moins pas nativement), même si les deux sont conformes à la spécification Unicode de base.
Le projet ICU (International Components for Unicode) est un ensemble de bibliothèques C / C ++ et Java qui implémente cette fonctionnalité, et il y a même une démonstration en ligne de celui-ci. Et sous "projets liés", il y a un lien vers un projet .NET qui semble être un wrapper d'objet COM pour la bibliothèque ICU qui permettrait à cette fonctionnalité d'être exposée au code managé. Mais il n'est pas clair si ce projet .NET est toujours actif.
Mais pour voir ce comportement en action, accédez à la démonstration de collation ICU .
Collez ce qui suit dans la zone de texte d' entrée sur le côté gauche:
1
2
10B
6
11
10A
3
10
Réglez toutes les options sur "par défaut". Cochez l'option "Entrer des numéros de ligne" à droite du sortbouton et assurez-vous que l'option "Diff forces" n'est pas cochée.
Cliquez sur le sortbouton et vous devriez récupérer ce qui suit:
[1] 1
[8] 10
[6] 10A
[3] 10B
[5] 11
[2] 2
[7] 3
[4] 6
C'est ce à quoi vous devez vous attendre lors d'un tri de chaîne typique et ce que vous voyez dans SQL Server.
Maintenant, dans la série de boutons radio juste au-dessus du sortbouton, la deuxième ligne est étiquetée "numérique". Sélectionnez le bouton radio "on".
Cliquez sortà nouveau sur le bouton et vous devriez récupérer ce qui suit:
[1] 1
[2] 2
[7] 3
[4] 6
[8] 10
[6] 10A
[3] 10B
[5] 11
Vous vous demandez si cela fonctionne lorsque la partie numérique est au milieu de la chaîne? Ok, collez ce qui suit dans la zone de texte d' entrée sur le côté gauche (en remplaçant la liste précédente):
Script - 1.sql
Script - 2.sql
Script - 10B.sql
Script - 6.sql
Script - 11.sql
Script - 10A.sql
Script - 3.sql
Script - 10.sql
Assurez-vous que le paramètre numérique est toujours défini sur "on". Cliquez sortà nouveau sur le bouton et vous devriez récupérer ce qui suit:
[1] Script - 1.sql
[2] Script - 2.sql
[7] Script - 3.sql
[4] Script - 6.sql
[8] Script - 10.sql
[6] Script - 10A.sql
[3] Script - 10B.sql
[5] Script - 11.sql
Vous voulez voir ça ailleurs? Créez un dossier sur votre disque dur, quelque chose comme C: \ temp \ sorting \ , et créez des fichiers vides de ces mêmes noms "Script -...". Faites un DIR
dans une fenêtre de commande et vous verrez le tri standard. Mais lorsque vous regardez la liste des fichiers dans l'Explorateur Windows, vous verrez la liste triée en utilisant l'option "numérique" :-).