请教各位:一个field :   type varchar2(20);contents:漏钢1
漏钢2
漏钢3
漏钢12
排序后,漏钢12 会排到漏钢2的前面,(字符排序逐位比较),如何才能
按照正常的如上的排序方式?
谢谢!!

解决方案 »

  1.   

    order by to_number(substr(fieldName,5,length(fieldName) - 4) )
      

  2.   

    order by field, to_number(substr(field, 3))
      

  3.   

    汉字个数不定时
    lengthb(field)-length(field) 就是汉字的个数
    order by field, to_number(substr(field, lengthb(field)-length(field)+1))
      

  4.   

    如果要排序的字段都是只有末尾有若干位数字,那么可以自己写个函数,输入是这个字符串,返回值是将末尾的数字都变为等长的数字串(长度就取最大可能的数字串的长度为,不足补0)。例如最长的数字串长度不会超过5位,那么输入"漏钢1",返回"漏钢00001",输入"漏钢12","漏钢00012"。这样,order by这个函数就可以了。
      

  5.   


    order by translate(field,'1234567890',' $'),TO_NUMBER(replace(field,translate(field,'1234567890',' $')))
      

  6.   

    zzwind5()你说得不对吧select lengthb('就是汉字的个数333')  from dual
    LENGTHB('就是汉字的个数333')
    ----------------------------
                              24
    1 row selected
     
     
    select length('就是汉字的个数333')  from dual
    LENGTH('就是汉字的个数333')
    ---------------------------
                             10
    1 row selected
     
     
      

  7.   

    上面写错了select field from 
    (
    select t.*, rank() over(order by substr(field, 1, lengthb(field)-length(field))) b 
    from table_name t)
    order by b, to_number(substr(field, lengthb(field)-length(field)+1));
      

  8.   

    要这样倒是可以
    select to_number(substr('就是汉字的个数333', (lengthb('就是汉字的个数333')-length('就是汉字的个数333'))/2+1))  from dual
      

  9.   

    to傻傻猫
    SQL> select lengthb('就是汉字的个数333') from dual;LENGTHB('就是汉字的个数333')
    ----------------------------
                              17SQL> select length('就是汉字的个数333') from dual;LENGTH('就是汉字的个数333')
    ---------------------------
                             10
    要看用什么字符集的 你的是一个汉字占3个字节,我的是占两个