Frage

Ist es möglich, in MySQL alphabetisch auf folgende Weise zu bestellen:

A1
A2
A3
A5
A10
A11
A20
A23
A24

Leider wird die Bestellung, die ich bekomme, bestellt, wie unten hier gesehen. Beachten Sie, wie eine Nummer vor A10 nicht zusammengefasst ist?

A1
A10
A11
A12
A2 <A2
A20
A23
A24
A3 <A3
A5 <A5

HINWEIS: Diese alphanumerischen Zeichenfolgen sind tatsächlich Postcodes, daher kann ich A01 nicht einsetzen, da dies technisch gesehen kein Post -Code -Präfix ist. Ich möchte auch vermeiden, dass der Benutzer in andere Daten eingeben, um dem System ordnungsgemäß zu sortieren, da meine Benutzer nicht sehr webverständlich sind. Außerdem können diese alphanumerischen Zeichenfolgen nicht in der richtigen Reihenfolge in die Datenbank eingegeben werden, da sie jederzeit gelöscht und hinzugefügt werden können.

War es hilfreich?

Lösung

Sie können einen Ausdruck verwenden, um den numerischen Teil der Zeichenfolge auszuwählen, wenn er sich in einer konsistenten Position in der Zeichenfolge befindet. Dann die numerische Zeichenfolge zu seinem Ganzzahlwert durch hinzufügen, indem Sie Null zu ihm hinzufügen.

...
ORDER BY SUBSTR(postalcode,2)+0

Andere Tipps

Erstellen Sie ein UDF, das Ihren Varchar in einen numerischen Wert umwandelt. Verwenden Sie diese Funktion dann in der Reihenfolge nach Klausel Ihrer Abfrage.

Grundsätzlich weist Ihre Funktion jeder Zeile einen numerischen Wert zu, so etwas wie ASCII -Wert eines (oder was auch immer der erste Buchstaben ist) * 100 + der analysierte Numerik des Restes des VARCHAR.

Eine Lösung besteht darin, genau herauszufinden, was das Format einer Postleitzahl ist, und dann in seine Teile aufzuteilen. Nehmen wir an, es war ein Zustand, die Postleitzahl: Sie könnten also NC27605 haben. Dann können Sie Status speichern und separat Zip_code und die Postleitzahl ein berechneter Wert sein. Dann würde das Sortieren von Status dann als zip_code bedeuten, sie zu sortieren.

Dies wird immer als guter Stil angesehen. Der Punkt einer Datenbank besteht darin, dass alle unabhängigen Datenbits unabhängig zugänglich sind.

Die Bestellung ist alphabetisch.

Aber Sie möchten sie so bestellen, als wären sie Zahlen. Leider gibt ASC und DESC nicht viel Flexibilität.

Meine Kopie von Mysql, New Riders, 2000, von Paul Dubois (jetzt etwas veraltet) sagt

Ab MySQL 3.23.2 können Sie auch einen Ausdruck als Sortierspalte angeben. Zum Beispiel gibt `order by rand () Zeilen in zufälliger Reihenfolge zurück

Wenn diese Funktion noch verfügbar ist und Sie eine finden können eingebaut Funktion oder gegossen, um den Varchar in eine Ganzzahl umzuwandeln, wäre es möglich ORDER BY diese Funktion? Oder lese ich zu viel hinein?

Hmmm, ich denke, Bill Karwin drückt es am besten aus.

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