我正在使用ColdFusion 8和SQL Server 2008 R2。
我正在尝试查询一列值以获取值在一定范围内的行。该列应该是数字,但不是。它被设置为varchar(由其他人)。有超过100,000行的数据。这是数据的FAKE样本:
ID COLUMN
1 1
2 1.2
3 0.9
4 5
5 -6
我的查询如下:
select column
from table
where column between 1 and 2
此查询不会运行,因为where语句的列是varchar,我收到转换错误,因此我必须将where语句更改为:
where column between '1' and '2'
现在,当我运行这样的查询时,它会运行,但我不会得到结果。但我知道我应该看到结果,因为我知道列字段中的许多值都在我查询的范围内。
我想知道我是否因为该字段是varchar而不是数字而看不到任何结果。可能会弄乱我的结果吗?
此外,我们正在搜索100,000多条记录,使用varchar字段而不是数字字段会有很大的性能影响吗?
答案 0 :(得分:7)
例如,您需要将搜索结果WHERE ISNUMERIC(column) = 1 AND CAST(column AS decimal(10,5)) BETWEEN 1 AND 2
。
答案 1 :(得分:1)
还有一个选择
隐式转换在nvarchar()中执行到numeric()
操作成本明显和隐式转换等于,但代码稍微少一些;))
SELECT *
FROM dbo.your_table
WHERE [COLUMN] BETWEEN 1.00 AND 2.00