Frage

Ich habe eine Spalte von Zahlen als Zeichen gespeichert. Wenn ich eine ORDER BY für diese Spalte bekomme ich folgende:

100
131
200
21
30
31000
etc.

Wie kann ich bestellen numerisch diese Zeichen? Muß ich etwas konvertieren, oder gibt es bereits einen SQL-Befehl oder eine Funktion für das?

Danke.

War es hilfreich?

Lösung

Versuchen Sie folgendes:

ORDER BY CAST(thecolumn AS int)

Andere Tipps

Dieser arbeitete für mich:

ORDER BY ABS(column_name)

Dies ist ein Problem mit numerischen Zeichenfolge in einer „natürlichen Art“ Ordnung (wenn Sie „natürliche Sortierung“ auf Google Lookup finden Sie Tonnen von Material finden). Im Wesentlichen die Zeichenfolge als int Gießen und auf dem resultierenden Wert Sortierung sollte es beheben.

Der Grund dafür ist, dass mit einem char-Datentyp, können Sie die Zeilen als String sind zu sortieren.

Die Idee zu ORDER BY CAST() ist richtig, aber die Leistung dieser wird als die Anzahl der zurückgegebenen Ergebnisse steigen nach unten gehen.

Wenn es nur numerische Daten in dieser Spalte ist, wäre die beste Praxis sein, einen geeigneten numerischen Datentyp zu finden und verändern.

Wenn Sie wirklich nicht die Spalte ändern und Sie finden sich Performance-Probleme mit, schlage ich vor, die eine Sortierreihenfolge Spalte, die den Wert Guss auf eine ganze Zahl enthält (wird auf einen geeigneten Wert umgewandelt NULLS).

Index die Sortierreihenfolge Spalte und im Idealfall einen Trigger auf die Spalte CHAR hinzufügen, so dass Einsätze oder Aktualisierungen der char-Wert ein Update für die Integer-Wert auslösen.

In einigen Situationen könnte dies ein gutes Spiel sein:

ORDER BY LENGTH(column_name), column_name

Vor allem, wenn Sie eine Spalte mit entweder all Ziffern oder eine Mischung aus Buchstaben und Ziffern, aber alle mit der gleichen Länge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top