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

时间:2012-10-23 20:46:31

标签: sql sql-server-2008 sql-server-2005 sql-server-2008-r2 sql-server-2000

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

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

1 个答案:

答案 0 :(得分:7)

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

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

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

请注意,如果您的数字包含小数点,那么您将需要使用DECIMALFLOAT