4

我正在使用 ColdFusion 8 和 SQL Server 2008 R2。

我正在尝试查询一列值以获取值在一个范围内的行。该列应该是数字,但不是。它被设置为 varchar(由其他人)。有 100,000 多行数据。这是数据的假样本:

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 字段而不是数字字段会对性能造成很大影响吗?

4

2 回答 2

8

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

于 2012-11-08T21:00:44.057 回答
1

另一种选择

将 nvarchar() 隐式转换为 numeric()

操作成本明显和隐式转换相等,但代码少一点;))

  • 谓词

在此处输入图像描述

SELECT *
FROM dbo.your_table
WHERE [COLUMN] BETWEEN 1.00 AND 2.00
于 2012-11-09T09:11:20.830 回答