我发现了一个关于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