Това ще направи това:
SELECT value
FROM Table1
ORDER BY value REGEXP '^[A-Za-z]+$'
,CAST(value as SIGNED INTEGER)
,CAST(REPLACE(value,'-','')AS SIGNED INTEGER)
,value
4-те нива на the ORDER BY
:
REGEXP
присвоява на всеки алфа ред 1, а на неалфа - 0SIGNED INT
Сортира всички числа по частта, предхождаща тирето.SIGNED INT
след премахване на тирето сортира всеки от елементите със същата стойност преди тирето по частта след тирето. Потенциално може да замени номер 2, но не бих искал да третира 90-1 по същия начин като 9-01, ако възникне такъв случай.- Сортира буквите по азбучен ред.
Демо:SQL Fiddle