有一列是Vchar类型的.如下:item_num
12
34
LR45
23我想按这一列进行排序.这样写的.select item_num from table1 order by (case when substr(item_num,1,2)='LR' then item_num else to_number(item_num) end)就是想让那些数字的按顺序排.这样写提示:这里需要char,但是确是number错误.请指教..谢谢.

解决方案 »

  1.   

    select item_num from table1 where substr(item_num,1,2)<>'LR' order by item_num;
      

  2.   

    楼上的兄弟在这逗呢吧.我需要把那LR开头的取出来的.而且.你那直接order by 也不对.
      

  3.   

    楼主可以试一下:select * from table1
    order by to_number
    (
       case 
          when substr(item_num,1,2)='LR' then
              '9999999999'||substr(item_num,3)
          else
               item_num
          end
    )语句中的'9999999999'的用意是:(1) 让含有字母的数据行排在后面并且含有字母的行也可以排序.
                               (2) 这他9的字符串的长度可以随意改变.只要确保大于等于ITEM_NUM列所含有的实际数据的最大长度就可以了.
      

  4.   

    比如:
    item_num 
    12
    LR45 
    24 
    LR35 
    53 你想要的输出结果是什么样的?item_num 
    12
    23  
    LR35 
    LR45
    53
    这样?
      

  5.   

    12
    24
    53
    LR35
    LR45能这样最好.如果只是order by 它会只按第一个字符排序.
      

  6.   


    如果就要这样的结果的话,直接order by item_num不就行了么
      

  7.   

    3楼的方法可以.你肯定没有测试过,13
    4343
    3423
    23如果上面的话,直接ORDER BY 会产生如下结果:13
    23
    3423
    4343也就是只按第一个排.不过还是谢谢你了.
      

  8.   

    谁说order by 只会按第一个字符排序
    select item_num from table1 order by item_num是先按第一个字母排,如果第一个字母相同(区分大小写),再按第二个字母排数字排在字符前
      

  9.   

    还是没太明白,直接order by就能全部排序了啊,如果要求是按照最后两位排序倒是不能直接order by了。
    另外,order by不是只按第一个字符排序,是全部顺序排。不过问题解决了就好。
      

  10.   

    134 
    434
    3425 
    23 如果上面的话,直接ORDER BY 会产生如下结果: 134 
    23 
    3423 
    434刚才写错了.你看这种结果,我是想按照数据排序.这不是我想要的.