У мене є таблиця з діапазонами чисел від 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
замість цього.