所以我最近在比較兩個值時遇到了一個奇怪的錯誤。T-SQL ORDER BY忽略「' - '+ ...」但不是「'+'+ ...」
我的數值範圍是從-1到2. 有時它認爲-1大於0,解決方案很簡單。顯然是列設置爲varchar(50),而不是int。
但這讓我想到爲什麼會發生這種情況。因爲即使列被設置爲varchar(50),' - '應該具有比'0'更低的char值(char值爲' - '爲45且char值爲'0'應爲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的charValue)
由 '+' 順序感覺對但 ' - ' 似乎.. 。錯誤
任何人都知道爲什麼它是這樣的?
其他信息
Server版本:12.0.4213
整理:Finnish_Swedish_CI_AS
不知道還有什麼可以扭曲的結果。詢問你是否需要更多信息。
請原諒我的無知,但什麼是功能'A(X)'和'B(X)'? –
我得到正常/預期的結果 – Paparazzi
A和B只是創建表的名稱,而x是創建表中單個列的名稱。我本可以更清楚,對不起:P –