Mysql
 sql >> Database >  >> RDS >> Mysql

Ordinamento naturale SQL ORDINA PER

Questo lo farà:

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

I 4 livelli di the ORDER BY :

  1. REGEXP assegna a qualsiasi linea alfa un 1 e non alfa uno 0
  2. SIGNED INT Ordina tutti i numeri in base alla parte che precede il trattino.
  3. SIGNED INT dopo aver rimosso il trattino, ordina tutti gli elementi con lo stesso valore prima del trattino per la parte dopo il trattino. Potenzialmente potrebbe sostituire il numero 2, ma non vorrei trattare 90-1 come 9-01 in caso si presentasse il caso.
  4. Ordina le lettere in ordine alfabetico.

Demo:SQL Fiddle