Лучший сценарий - создание двух дополнительных столбцов, один для буквенной части, один для числовой части;тогда это так же просто, как ORDER BY alpha_part ASC, num_part ASC
.Если у вас есть объединенный индекс для этих двух столбцов, он также будет очень быстрым.
Если вам абсолютно необходимо проанализировать столбец во время запроса, это занимает время - а также делает индексы бесполезными, что делает все такнамного медленнее.Но вы можете сделать это:
...
ORDER BY
REGEXP_REPLACE(qt_no, '\d+', '') ASC,
CAST(REGEXP_REPLACE(qt_no, '\D+', '') AS INTEGER) ASC
РЕДАКТИРОВАТЬ: Мне очень жаль, но я не знаю, как это сделать на 5.7, кроме как это:
SELECT qt_no FROM t
ORDER BY
REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(qt_no, '0', ''), '1', ''), '2', ''), '3', ''), '4', ''), '5', ''), '6', ''), '7', ''), '8', ''), '9', '') ASC,
CAST(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(qt_no, 'A', ''), 'B', ''), 'C', ''), 'D', ''), 'E', ''), 'F', ''), 'G', ''), 'H', ''), 'I', ''), 'J', ''), 'K', ''), 'L', ''), 'M', ''), 'N', ''), 'O', ''), 'P', ''), 'Q', ''), 'R', ''), 'S', ''), 'T', ''), 'U', ''), 'V', ''), 'W', ''), 'X', ''), 'Y', ''), 'Z', '') AS UNSIGNED) ASC;