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
:REGEXP
atribui a qualquer linha alfa um 1 e não alfa a 0SIGNED INT
Classifica todos os números pela parte que precede o traço.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.- Classifica as letras em ordem alfabética.
Demonstração:SQL Fiddle