Здесь можно попробовать использовать функцию ASCII
вместе с выражением CASE
:
SELECT mycol
FROM mytable
ORDER BY
CASE WHEN LEFT(mycol, 1) LIKE '[A-Z]' THEN 0 ELSE 1 END,
LEFT(mycol, 1),
CASE WHEN RIGHT(mycol, 1) LIKE '[A-Z]' THEN 0 ELSE 1 END,
RIGHT(mycol, 1);
Демо
Логика здесь использует четыре уровня сортировки, пару для каждого из двух символов в mycol
. Выражения CASE
ставят буквы перед цифрами. После этого мы просто сортируем по возрастанию по номеру или букве.
Еще один подход к этому состоит в том, чтобы рассматривать ваш столбец как основную цифру 36 (10 цифр плюс 26 букв), а затем просто сортировать на основе этого числа, преобразованного обратно в десятичную основную цифру 10. Но это может быть уродливее и запутаннее, чем решение, которое я выложил выше.