3

我有一张表格,其数字范围为 0-2000000。如果我执行 BETWEEN 50 AND 100,我可以使用 between 语句来获取事物的记录。这很有效。

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

4

1 回答 1

7

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

因此,这是可以工作的代码:

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

请注意,如果您的数字包含小数点,那么您将需要使用DECIMALorFLOAT来代替。

于 2012-10-23T20:56:01.993 回答