【发布时间】:2016-08-22 15:15:12
【问题描述】:
所以我最近在比较两个值时遇到了一个奇怪的错误。
我的值是从 -1 到 2 的范围。 有时它认为-1大于0,解决起来很容易。显然该列设置为 varchar(50) 而不是 int。
但这让我想到了为什么会这样。因为即使列设置为 varchar(50),'-' 的 char 值也应该低于 '0'('-' 的 charvalue 是 45,'0' 的 charvalue 应该是 48)
我做了一些测试,结果发现,'-' 是 ORDER BY 唯一不关心的字符。
例子:
SELECT
A.x
FROM
(
VALUES
('-5'), ('-4'), ('-3'), ('-2'), ('-1'),
('0'), ('1'), ('2'), ('3'), ('4'), ('5')
) A(x)
ORDER BY
A.x;
SELECT
B.x
FROM
(
VALUES
('+5'), ('+4'), ('+3'), ('+2'), ('+1'),
('0'), ('1'), ('2'), ('3'), ('4'), ('5')
) B(x)
ORDER BY
B.x
结果:
Result of A
0
1
-1
2
-2
3
-3
4
-4
5
-5
Result of B
+1
+2
+3
+4
+5
0
1
2
3
4
5
(+ 的字符值为 43)
“+”顺序感觉正确,但“-”似乎...错误
有人知道为什么会这样吗?
其他信息
服务器版本:12.0.4213
排序规则:Finnish_Swedish_CI_AS
不知道还有什么可能会扭曲结果。询问您是否需要更多信息。
【问题讨论】:
-
原谅我的无知,
A(x)和B(x)的功能是什么? -
我得到正常/预期的结果
-
A 和 B 只是创建的表的名称,x 是创建的表中单个列的名称。我本可以说得更清楚,对不起:P
-
尝试其他排序规则
标签: sql-server tsql sql-order-by varchar