<=
работает отлично. Проблема в том, что вы ожидаете числовую сортировку строк. Это не работает без специальной обработки.
Сортировка строк
a1 - сортировка строк a10 в следующем порядке:
a1
a10
a2
a3
a4
...
Это потому, что и a1, и a10 начинаются с "a1".
Поскольку они являются строками, числовые значения не имеют значения. Посмотрите, что происходит, когда мы заменяем a-z на 0-9:
ab
aba
ac
ad
ae
Теперь вы видите, почему вы получаете результаты, которые вы есть? В словаре aba предшествует ac, а a10 предшествует a2.
Чтобы решить вашу проблему, лучше разбить ваш столбец на две части: одну букву и одну цифру. Некоторые неприятные выражения могут дать вам правильный порядок сортировки, но это гораздо худшее решение, если у вас нет абсолютно никакого выбора.
Вот один из способов. Это может не подходить или может быть более эффективный способ, но я не знаю, на что похожи все ваши данные.
SELECT
FROM Table
WHERE
Col LIKE 'a%'
AND Substring(Col, Convert(int, PatIndex('%[^a-z]%', Col + '0'), 1000)) <= 10
Если альфа-часть - это всегда один символ, вы можете сделать это проще. Если цифры могут иметь буквы после них, то нужно больше вертеться.
Можно также попробовать производную таблицу, которая разбивает столбец на отдельные буквенные и числовые части, а затем помещать условия во внешний запрос.
Упорядочение
Помните, что каждая строка и столбец на основе символов имеют параметр сортировки, который определяет, какие буквы сортируются вместе (в основном для регистра и ударения), и это может изменить результаты операции неравенства.
SELECT *
FROM Table
WHERE Value <= 'abc'
SELECT CASE WHEN Value <= 'abc' COLLATE Latin1_General_CS_AS_KS_WS THEN 1 ELSE 0 END
FROM Table
Используемые здесь параметры сортировки чувствительны к регистру, чувствительны к акценту.
Вы можете увидеть все доступные вам параметры сортировки следующим образом:
SELECT *
FROM ::fn_helpcollations()