【发布时间】:2015-02-01 18:00:29
【问题描述】:
我正在使用 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) 更改为数字,以便我可以正确排列它们?
非常感谢。
【问题讨论】:
-
你到底为什么将数字存储在
varchar列中?这几乎总是一个糟糕的选择 - 您的问题说明了为什么这是一个坏主意的一个原因。 -
除非您明确指定
ORDER BY子句,否则NO ORDER 已定义 - 如果您需要订单 - 请指定! -
感谢您的回复。我想我在第二个查询中使用了 order by num asc 但它仍然返回了相同的结果。