Часть трюка имеет дело с "-": так как она необязательна, вы не можете напрямую использовать SUBSTR в этом поле (как указал Марк Б), чтобы избавиться от всего после него
Итак, трюкбыло бы: добавить «-» к значению!
Примерно так:
ORDER BY CAST(SUBSTR(CONCAT(yourfield,'-'), 0, LOCATE('-', CONCAT(yourfield,'-'))) AS UNSIGNED)
Другой полезный подход состоит в том, чтобы вместо использования SUBSTR «удалять» все после «-», замените его (и все буквы) на «0», а затем используйте CAST.