Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Ordenação Natural SQL ORDER BY


Isto irá fazê-lo:
SELECT value
FROM Table1
ORDER BY value REGEXP '^[A-Za-z]+$'
        ,CAST(value as SIGNED INTEGER)
        ,CAST(REPLACE(value,'-','')AS SIGNED INTEGER)
        ,value

Os 4 níveis do the ORDER BY :
  1. REGEXP atribui a qualquer linha alfa um 1 e não alfa a 0
  2. SIGNED INT Classifica todos os números pela parte que precede o traço.
  3. SIGNED INT depois de remover o traço classifica qualquer um dos itens com o mesmo valor antes do traço pela parte após o traço. Potencialmente poderia substituir o número 2, mas não gostaria de tratar 90-1 da mesma forma que 9-01, caso surja o caso.
  4. Classifica as letras em ordem alfabética.

Demonstração:SQL Fiddle