在varchar字段上使用BETWEEN而不是数字字段?

时间:2012-11-08 20:55:43

标签: sql sql-server-2008 coldfusion coldfusion-8

我正在使用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字段而不是数字字段会有很大的性能影响吗?

2 个答案:

答案 0 :(得分:7)

例如,您需要将搜索结果WHERE ISNUMERIC(column) = 1 AND CAST(column AS decimal(10,5)) BETWEEN 1 AND 2

答案 1 :(得分:1)

还有一个选择

隐式转换在nvarchar()中执行到numeric()

操作成本明显和隐式转换等于,但代码稍微少一些;))

  • 谓词

enter image description here

SELECT *
FROM dbo.your_table
WHERE [COLUMN] BETWEEN 1.00 AND 2.00