Möchten Sie eine sinnvolle und effiziente Methode zum Sortieren von Zahlen in Zeichenfolgen als tatsächliche Zahlen? Erwägen Sie, für meinen Microsoft Connect-Vorschlag zu stimmen: Unterstützen Sie "Natural Sorting" / DIGITSASNUMBERS als Sortieroption
Obwohl diese Frage spezifisch für SQL Server ist und diese Antwort nicht, war ich der Meinung, dass ich diese Informationen dennoch veröffentlichen sollte, um das Bewusstsein dafür zu schärfen und um keine der anderen Antworten zu beanstanden.
Abgesehen davon ist es außerhalb von SQL Server in bestimmten Umgebungen möglich, diese Art der Sortierung durchzuführen. Dies ist zumindest in der Unicode-Dokumentation festgelegt. In dem UNICODE - Locale Auszeichnungssprache (LDML) TEIL 5: COLLATION Standard / Bericht gibt es ein Diagramm für Sortierungseinstellungen , die für die Anpassung der Sortierverhalten verschiedene Optionen beschrieben. Eine der Optionen ist -kn-true
oder [numericOrdering on]
:
Wenn gesetzt , um auf jeder Folge von Dezimalziffern (General_Category = Nd in dem [ UAX44 ]) bei einer primären Ebene mit seinem numerischen Wert sortiert. Zum Beispiel "A-21" <"A-123". Die berechneten Primärgewichte sind alle zu Beginn der digit Umordnung Gruppe. Somit ist bei einer nicht zugeschnittenen UCA-Tabelle "a $" <"a0" <"a2" <"a12" <"a⓪" <"aa".
Dieses Dokument ist jedoch ein "technischer Standard" und nicht Teil der Kernspezifikation von Unicode. Ein Hinweis oben im Dokument besagt:
Ein Unicode Technical Standard (UTS) ist eine eigenständige Spezifikation. Die Konformität mit dem Unicode-Standard impliziert keine Konformität mit einem UTS.
Daher ist dieses spezielle Verhalten in SQL Server oder sogar in .NET (zumindest nicht nativ) nicht verfügbar, obwohl beide der Kernspezifikation von Unicode entsprechen.
Das ICU- Projekt (International Components for Unicode) besteht aus einer Reihe von C / C ++ - und Java-Bibliotheken, die diese Funktionalität implementieren, und es gibt sogar eine Online-Demo davon. Unter "Verwandte Projekte" befindet sich eine Verknüpfung zu einem .NET-Projekt, das ein COM-Objektwrapper für die ICU-Bibliothek zu sein scheint, mit dem diese Funktionalität für verwalteten Code verfügbar gemacht werden kann. Es ist jedoch nicht klar, ob das .NET-Projekt noch aktiv ist.
Um dieses Verhalten in Aktion zu sehen, rufen Sie die ICU-Kollatierungsdemo auf .
Fügen Sie Folgendes in den Eingabetextbereich auf der linken Seite ein:
1
2
10B
6
11
10A
3
10
Setze alle Optionen auf "default". Aktivieren Sie die Option "Zeilennummern eingeben" rechts neben der sortSchaltfläche und stellen Sie sicher, dass die Option "Diff Strengths" deaktiviert ist.
Klicken Sie auf die sortSchaltfläche und Sie sollten Folgendes zurückbekommen:
[1] 1
[8] 10
[6] 10A
[3] 10B
[5] 11
[2] 2
[7] 3
[4] 6
Dies ist zu erwarten, wenn eine typische Zeichenfolgensortierung durchgeführt wird und was in SQL Server angezeigt wird.
In der Reihe der Optionsfelder direkt über der sortSchaltfläche ist die zweite Zeile mit "numerisch" gekennzeichnet. Aktivieren Sie das Optionsfeld "Ein".
Klicken Sie erneut auf die sortSchaltfläche, und Sie sollten Folgendes zurückerhalten:
[1] 1
[2] 2
[7] 3
[4] 6
[8] 10
[6] 10A
[3] 10B
[5] 11
Frage, ob dies funktioniert, wenn sich der numerische Teil in der Mitte der Zeichenfolge befindet? Ok, fügen Sie Folgendes in den Eingabetextbereich auf der linken Seite ein (ersetzen Sie die vorherige Liste):
Script - 1.sql
Script - 2.sql
Script - 10B.sql
Script - 6.sql
Script - 11.sql
Script - 10A.sql
Script - 3.sql
Script - 10.sql
Stellen Sie sicher, dass die numerische Einstellung weiterhin auf "Ein" gesetzt ist. Klicken Sie erneut auf die sortSchaltfläche, und Sie sollten Folgendes zurückerhalten:
[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
Möchten Sie dies an einem anderen Ort sehen? Erstellen Sie einen Ordner auf Ihrer Festplatte, etwa C: \ temp \ sorting \ , und erstellen Sie leere Dateien mit denselben "Script -..." -Namen. Wenn Sie DIR
in einem Befehlsfenster einen Befehl ausführen, wird die Standardsortierung angezeigt. Wenn Sie sich die Liste der Dateien im Windows Explorer ansehen, sehen Sie die Liste sortiert nach der Option "numerisch" :-).