数字和 VARCHAR

NUMERIC and VARCHAR

我正在使用 SQL Server 2008 R2 进行 运行 查询,我遇到了一个数据库,它将数值存储为 varchar(4)。例如:

SELECT [num]
FROM  [TABLE1]
WHERE num > '95'

我得到以下结果

96
97
98
99
999

然而,当我 运行 没有 '' 的相同查询时,即

SELECT [num]
FROM  [TABLE1]
WHERE num > 95

然后我得到

100
101
102
103
104
105
106
107
108
109
110
111
112
113
116
117
120
7001
7002
7003
7004
7005
7006
7007
96
97
98
99
999

无论如何,我没有按顺序获取数字,即 95、96、97、98、99。我理解这是因为它们存储为 varchar(4),即字符串格式。请有人解释一下在这两种情况下会发生什么,以及在上述两种情况下字符串如何比较?

此外,如果有人可以帮我编写代码,将这些 varchar(4) 动态更改为数字,以便我可以正确安排它们?

非常感谢。

当您使用 > '95' 时,它会按字母顺序比较 "numbers",这就是结果是这样的原因。当您使用 > 95 时,它会将列转换为数字,这就是不同结果的原因。

要确定实际发生的情况,您应该自己进行铸造。当然,您不应该将数字存储为 varchars。

正确的顺序是

order by convert(int, num)

但如果 table 中有非数字字段,它将失败。

> 对字符串而不是数字进行字典顺序比较。所以输出是按字符串顺序排列的(按 ASC 排序)。