我在SQL中发现了一个关于MAX()函数的非常有趣/奇怪的事情。
我的列ID是varchar2(20)数据类型,有以下条目: -
ID
根据我的理解,如果我使用“从表格中选择最大值(ID)”;我应该得到909作为结果,但我得到99.有人可以解释为什么会发生这种情况吗?
1
2
3
4
5
6
9
99
909
答案 0 :(得分:9)
您误解了 - 因为列是varchar而不是数字,所以它按字符串值排序; 909
出现在99
之前,因此99
是最大值。
要查看列的最大数值,请尝试:
select max(to_number(ID)) from my_table
答案 1 :(得分:6)
由于您使用MAX的列是VARCHAR类型,因此它将根据逐个字符的评估对值进行排序。它选择99因为9> 0,它将忽略字符串的其余部分。
答案 2 :(得分:3)
您的列被表示为字符,而不是数字。因此,请将其视为按字母顺序排序。按字母顺序排列的909将按照升序排在99之前。