Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Natürliche Sortierung SQL ORDER BY

Dies wird es tun:

SELECT value
FROM Table1
ORDER BY value REGEXP '^[A-Za-z]+$'
        ,CAST(value as SIGNED INTEGER)
        ,CAST(REPLACE(value,'-','')AS SIGNED INTEGER)
        ,value

Die 4 Ebenen des the ORDER BY :

  1. REGEXP weist jeder Alpha-Zeile eine 1 und Nicht-Alpha-Zeilen eine 0 zu
  2. SIGNED INT Sortiert alle Zahlen nach dem Teil vor dem Bindestrich.
  3. SIGNED INT Nach dem Entfernen des Bindestrichs werden alle Elemente mit dem gleichen Wert vor dem Bindestrich nach dem Anteil nach dem Bindestrich sortiert. Könnte möglicherweise Nummer 2 ersetzen, würde aber 90-1 nicht gleich behandeln wollen wie 9-01, sollte der Fall eintreten.
  4. Sortiert die Buchstaben alphabetisch.

Demo:SQL-Geige