我的表格的数字范围是0-2000000。如果我做了BETWEEN 50和100,我可以使用一个between语句来获取事物的记录。这是有效的。
但是我遇到的问题是因为这个列是一个varchar,如果有任何记录在字符串中有一些东西为“1FD32”,我就无法在它之间进行选择。 SQL服务器无法转换“BETWEEN 50 AND 100”,因为它正在寻找一个int。如何获取这些范围之间的所有记录,并忽略其中的任何字母?
答案 0 :(得分:7)
如果要进行数值比较,保证不出错的唯一方法是使用CASE
语句。这是唯一保证评估顺序的SQL语句(不用于聚合函数时)。
所以,这里的代码将起作用:
select *
from t
where (case when isnumeric(col) = 1 then cast(col as bigint) end) between 20 and 100
请注意,如果您的数字包含小数点,那么您将需要使用DECIMAL
或FLOAT
。