ORDER BY varchar mit [a-9] anstelle von [0-Z] in SQL

8

SQL ordnet standardmäßig Zahlen vor Zeichen an.

Wenn ich also die Spalte "name" habe:

%Vor%

Da SQL nach 0-Z sortiert (zuerst 0 bis 9, dann a-Z), wird die Abfrage

%Vor%

führt zu:

%Vor%

Aber ich will, dass es nach a-0 sortiert (zuerst a-Z, dann 0-9).

%Vor%

Wie mache ich das in einer Abfrage? Genauer gesagt, wie mache ich das in SQLite?

Ich fand eine Lösung in MySQL-Ergebnisse alphabetisch sortieren, aber mit Zahlen zuletzt , aber nur für das erste Zeichen.

    
Nic 26.03.2012, 13:32
quelle

5 Antworten

3

Ich würde SELECT in einer anderen Spalte vorschlagen, zB name_replace , wobei die Ziffern durch ein High-ASCII-Zeichen ersetzt werden (zB ~ ), dann nach dieser Spalte und dann nach dem Namen sortieren. Leider hat SQLite keine Unterstützung für regulären Ausdruck ersetzen:

%Vor%

Beim Sortieren nach name_replace werden die Ziffern zuletzt angezeigt. Die Sortierung in name wird dann nach den Ziffern sortiert.

    
David Faber 26.03.2012 13:54
quelle
2

Dies macht den Trick mit den bereitgestellten Daten.

%Vor%

Sie sollten sich jedoch die verschiedenen Kollationstypen ansehen, um sicherzustellen, dass sie auf der ganzen Linie Ihren Vorstellungen entsprechen.

UPDATE: Sie haben SQLite erwähnt, aber ich habe dies auf MSSQL getestet. Nicht sicher, ob diese Sortierung in SQLite verfügbar ist, aber die Kommentare unten können nützliche Informationen enthalten.

    
Dan Roberts 26.03.2012 14:21
quelle
1

Bitte testen Sie mit diesen Daten bitte

%Vor%

oder

%Vor%     
t-clausen.dk 26.03.2012 13:47
quelle
0

Thsi ersetzt 0-9 über ASCII 122 (was Kleinbuchstaben z ist).

SQLLite hat keine CHAR-Funktion, um die Ersetzung durch Zeichencode (z. B. CHAR(123) bis CHAR(132) ), die anstelle meines CHAR (123) -Verfahrens erforderlich sein können, durchzuführen

Ungeprüft natürlich: -)

%Vor%

Edit: obwohl, @David Fabers Lösung tut das gleiche, aber etwas einfacher ...

    
gbn 26.03.2012 13:56
quelle
0

Das ist meine Idee: Sie fügen eine weitere "help_column" hinzu, die prüft, ob das erste Zeichen eine Zahl ist und 1 zuweisen, andernfalls 0 zuweisen und dann nach dieser Spalte und dann nach dem Namen sortieren:

%Vor%

Natürlich müssen Sie gegebenenfalls den regulären Ausdruck [0-9] verbessern, um mehr als eine Zahl zu behandeln.

Und natürlich sollten Sie die innere Abfrage (die mit mehreren Vereinigungen mit Ihrer Tabelle) ersetzen.

    
Diego 26.03.2012 13:44
quelle

Tags und Links