我有一张表格,其范围是0到2000000。如果我在50和100之间执行操作,则可以使用between语句获取事物记录。
但是,我遇到的问题是,如果此列是varchar,那么如果字符串中包含“ 1FD32”中的某条记录,我将无法在其中进行选择。 SQL Server无法转换“ BETWEEN 50 AND 100”,因为它正在寻找一个int。我如何获取这些范围之间的所有记录,而忽略其中包含字母的记录?
最佳答案
如果要进行数值比较,保证没有错误的唯一方法是使用CASE
语句。这是唯一保证评估顺序的SQL语句(当未与聚合函数一起使用时)。
因此,下面的代码将起作用:
select *
from t
where (case when isnumeric(col) = 1 then cast(col as bigint) end) between 20 and 100
请注意,如果您的数字包含小数点,那么您将要使用
DECIMAL
或FLOAT
代替。