SQL Server - 在带有文本和数字的varchar字段中的两个数字范围之间进行选择

Bra*_*ady 3 sql sql-server-2005 sql-server-2000 sql-server-2008 sql-server-2008-r2

我有一个数字范围从0到2000000的表.如果我做了BETWEEN 50和100,我可以使用一个between语句来获取事物的记录.这是有效的.

但是我遇到的问题是因为这个列是一个varchar,如果有任何记录在字符串中有一些东西为"1FD32",我不能在它之间进行选择.SQL服务器无法转换"BETWEEN 50 AND 100",因为它正在寻找一个int.如何获取这些范围之间的所有记录,并忽略其中的任何字母?

Gor*_*off 7

如果要进行数值比较,保证没有错误的唯一方法是使用该CASE语句.这是唯一保证评估顺序的SQL语句(不用于聚合函数时).

所以,这里的代码将起作用:

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

请注意,如果您的数字包含小数点,那么您将需要使用DECIMAL或FLOAT代替.