SQL MAX()函数

时间:2012-04-02 17:53:06

标签: sql oracle oracle11g

我在SQL中发现了一个关于MAX()函数的非常有趣/奇怪的事情。
我的列ID是varchar2(20)数据类型,有以下条目: -
ID
1
2
3
4
5
6
9
99
909
根据我的理解,如果我使用“从表格中选择最大值(ID)”;我应该得到909作为结果,但我得到99.有人可以解释为什么会发生这种情况吗?

3 个答案:

答案 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之前。