/ / SQL Server - Виберіть між двома діапазонами чисел в varchar поле з текстом і цифрами - sql, sql-server-2008, sql-server-2005, sql-server-2008-r2, sql-server-2000

SQL Server - Виберіть між двома діапазонами чисел у varchar поле з текстом та цифрами - sql, sql-server-2008, sql-server-2005, sql-server-2008-r2, sql-server-2000

У мене є таблиця з діапазонами чисел від 0 до 2000000. Я можу скористатися між твердженням, щоб отримати записи речей, якщо я виконую між 50 і 100. Це працює.

Але проблема, з якою я втікаю з цього моментуКолонка є varchar, якщо є будь-які записи з чимось у рядку як "1FD32", я не можу вибрати між нею. Сервер SQL не може перетворити "BETWEEN 50 AND 100", тому що він шукає int. Як я можу отримати всі записи між цими діапазонами і ігнорувати будь-які літери в них?

Відповіді:

5 за відповідь № 1

Якщо ви хочете зробити цифрове порівняння, єдиним способом гарантувати відсутність помилки є використання CASE заява Це єдине твердження SQL, яке гарантує порядок оцінки (коли не використовується з функціями агрегування).

Отже, тут працює код:

select *
from t
where (case when isnumeric(col) = 1 then cast(col as bigint) end) between 20 and 100

Зауважте, що якщо ваші цифри містять десяткові крапки, то ви хочете використовувати DECIMAL або FLOAT замість цього.