2012-04-02 88 views
3

我發現了一個關於SQL中MAX()函數的非常有趣/奇怪的事情。
我有VARCHAR2(20)的數據類型列ID,具有以下輸入: -
ID
1
2
3
4
5
6
9
99
909
按我理解如果我使用 「選擇最大值(ID)從表;」我應該得到909的結果,但我得到99.有人可以解釋爲什麼會發生這種情況嗎?SQL MAX()函數

回答

5

由於您正在使用MAX的列的類型爲VARCHAR,因此它將基於逐個字符的評估對值進行排序。它選擇99,因爲9> 0,它會忽略字符串的其餘部分。

9

您誤會了 - 因爲列是varchar,而不是數字,所以按字符串值排序; 909之前99,所以99是最大的。

要查看列的最大數值,嘗試:

select max(to_number(ID)) from my_table 
+0

你能建議SQL來執行轉換併產生答案嗎?假設我們不能總是隻在需要時更改數據庫模式。 – DOK 2012-04-02 17:57:42

+0

@DOK:如上? – 2012-04-02 17:58:28

+0

我可以理解這些機制......有些參考文獻可以幫助我。 – 2012-04-02 17:59:14

3

你列被表示爲字符,而不是數字。所以把它看作按字母順序排列。按字母順序909將按照升序排列在99之前。