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.
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:
Beim Sortieren nach name_replace
werden die Ziffern zuletzt angezeigt. Die Sortierung in name
wird dann nach den Ziffern sortiert.
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.
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 ...
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.
Tags und Links sql sqlite sql-order-by