SQL MAX()函数

Fem*_*ale 3 sql oracle oracle11g

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

小智 11

您误解了 - 因为列是varchar而不是数字,所以它按字符串值排序; 909来之前99,99最大值也是如此.

要查看列的最大数值,请尝试:

select max(to_number(ID)) from my_table
Run Code Online (Sandbox Code Playgroud)


the*_*boe 6

由于您使用MAX的列是VARCHAR类型,因此它将根据逐个字符的评估对值进行排序.它选择99因为9> 0,它将忽略字符串的其余部分.