我在查询数据库的时候遇到一个奇怪的问题,语句是:
select max(orderid) from tb_order;结果是:
max(orderid)
----------
9
为什么最大只能查询出max(orderid)=9,后面的都查不出来,
哪位能帮我解答一下吗?
谢谢了!

解决方案 »

  1.   

    你的orderid是不是字符串类型的?里面存的都是数字?
      

  2.   

    是的
    orderid  数据类型varchar2(10)
    里面存的是数字
      

  3.   

    要不你试试  select max(to_number(orderid)) from tb_order 是不是你想要的数据。
      

  4.   

    to: hevin非常感谢你,问题解决了,不过我还是不明白,先前那样查询为什么不行呢,非要转成nubmer数据类型才行呢?能告诉我吗?
      

  5.   

    因为字符串的比较是按ASCII码比较的.
    而且是先从第一个开始比较.
    所以'9'>'87'>'865'>'8435'>'84'
    你可以从中找到规律吧?第一个大的就大,相等的就再比较后面一个.
      

  6.   

    你的是字符串类型的,max函数当然按字符串的ASCII码来比较。当最关键的是,你存储的是非等长的字符串,比较的时候由第一个字符逐个往后比。
    PS:类似于这样要求的设计,一般是存储等长的字符串,数字不够长的就在前面填0,比如9,数据库中应该存储为:0000000009,这样应该里来会方便得多。只是存储的时候稍微麻烦一点