我發現了一個關於SQL中MAX()函數的非常有趣/奇怪的事情。
我有VARCHAR2(20)的數據類型列ID,具有以下輸入: -
ID
按我理解如果我使用 「選擇最大值(ID)從表;」我應該得到909的結果,但我得到99.有人可以解釋爲什麼會發生這種情況嗎?SQL MAX()函數
1
2
3
4
5
6
9
99
909
3
A
回答
5
由於您正在使用MAX的列的類型爲VARCHAR,因此它將基於逐個字符的評估對值進行排序。它選擇99,因爲9> 0,它會忽略字符串的其餘部分。
9
您誤會了 - 因爲列是varchar,而不是數字,所以按字符串值排序; 909
之前99
,所以99
是最大的。
要查看列的最大數值,嘗試:
select max(to_number(ID)) from my_table
3
你列被表示爲字符,而不是數字。所以把它看作按字母順序排列。按字母順序909將按照升序排列在99之前。
相關問題
- 1. SQL max函數
- 2. SQL Server 2012 - MAX()函數
- 3. DB2 sql Max記錄函數
- 4. MIN和MAX SQL函數
- 5. SQL甲骨文 - max函數
- 6. 凡在max函數
- 7. SQL嵌套聚合函數MAX(COUNT(*))
- 8. SQL MAX()函數返回最大值
- 9. Teradata SQL MAX函數和重複行
- 10. t-sql查詢中的MAX函數
- 11. 檢查SQL MAX()函數返回null
- 12. 如何在SQL中使用max函數
- 13. 異常沒有與SQL max函數來
- 14. Java的ResultSet中,使用MAX SQL函數
- 15. 如何使用SQL MAX(SUM())函數
- 16. 多列上的Sql Server Max函數?
- 17. SQL MAX函數奇怪的行爲
- 18. Conditional MAX函數
- 19. max()函數
- 20. 用max函數
- 21. ActiveJDBC MAX()函數
- 22. sqlite3 max函數
- 23. Mysql的MAX()內置函數
- 24. INNER JOIN MAX函數
- 25. SQLite 3 Max()函數
- 26. vb lambda MAX函數
- 27. 使用max函數
- 28. generic max jstl函數
- 29. MySQL中的SELECT MAX()函數
- 30. 使用max()函數在sql中列出總列數
你能建議SQL來執行轉換併產生答案嗎?假設我們不能總是隻在需要時更改數據庫模式。 – DOK 2012-04-02 17:57:42
@DOK:如上? – 2012-04-02 17:58:28
我可以理解這些機制......有些參考文獻可以幫助我。 – 2012-04-02 17:59:14