Если вам не нравится использовать произвольный страж (500), что может вызвать проблемы с сортировкой в зависимости от ожидаемого диапазона чисел, вы можете использовать несколько выражений для упорядочения.
-- put the numbers at the top
ORDER BY ISNUMERIC(YourField) DESC,
-- sort the numbers as numbers, sort the strings as nothing
CONVERT(INT, CASE WHEN ISNUMERIC(YourField) = 1 THEN YourField ELSE '0' END),
-- sort the strings
YourField
последний термин - это только тай-брейк, если оба термина являются числами с одинаковым значением ('01', '1') или два термина не являются числами.Для не чисел их первое и второе слагаемые всегда будут 0.
Более сложный, но, возможно, немного более безопасный.
Отредактировано, чтобы добавить хорошее сравнение с помощью парня ниже
create table #t
(
YourField varchar(4)
)
insert into #t(YourField) Values('1'), ('3'), ('234'), ('0'), ('00'),
('09'), ('9'), ('1a'), ('aaa'), ('aba'), ('-500')
Select YourField from #t
ORDER BY ISNUMERIC(YourField) DESC,
CONVERT(INT, CASE WHEN ISNUMERIC(YourField) = 1 THEN YourField ELSE '0' END),
YourField
drop table #t