还是40分那个帖子的排序问题
  求一个oracle 语句 支持数字,汉字首字母,正负数字,字母 升降排序 最好一个语句就能解决 最好不要分解开来
  高手快点看到我的贴!!

解决方案 »

  1.   

    desc   asc   针对 字符串 和数字都可以排序  试试吧
      

  2.   

    select × from  表 order by   字段  asc  /desc 
      

  3.   


    oracle 的order  by 会自动进行排序,无论你是数字、字母还是中文。
      

  4.   

    拼音排序select * from t1 order by nlssort(c1,'NLS_SORT=SCHINESE_PINYIN_M'); 
      

  5.   

    order by 字段 desc/asc,字段 desc/asc......
      

  6.   

    我在机子上试过 desc asc 是不支持正负数排序的
    请问大家就没有支持正负数排序的么?
    难道你们的desc asc支持正负数排序么?
      

  7.   

    你针对正负数自己再做一个排序列不就好了?
    用到的函数可能有:
    translate:用来判断该值是否是数值。
    substr:第一位"-"或"+"号
    decode(或case when):是否数值、中文、字母等等时的排序级别.简单的思想就是:把该字段的值按照数值、中文、英文分组给予不同的排序级别,然后再合并起来。
      

  8.   

    SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序 
    SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序 
    SCHINESE_PINYIN_M 按照拼音排序,系统的默认排序方式为拼音排序
    如果按笔画升序排列如下: 
    select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M'); 
    倒序可以用desc控制
      

  9.   

    .... order by  数字,汉字首字母,正负数字,字母 asc/desc
      

  10.   

    很明显,你这个是个varchar的字段,所以oracle先判断第一个字符是'-',然后再根据后面的数字进行排序,所以,-2会排在-1前面,而不是你期待的-1排在-2前面。
    暂无解决方案,期待高人出现解决问题。
      

  11.   


    大侠 其实我要的就是这个 因为接触oracle时间很短 实战经验全无 希望能得到帮助 最好能封装一个一系列排序判断 
      

  12.   


    Number(10,2)
    拍出来的正数 负数 不是前后的问题 而是错乱的问题 ++--+++-  
      

  13.   


    你发错地方了,oracle的问题发到java来干嘛,发到oracle区自然大把高手
      

  14.   


    转到oracle去 嘿嘿 
      

  15.   

    oracle的高手们 快来 !!
      

  16.   

    这个应该可以自定义的函数来解决。 或者使用变通的方法将值按类型分成多列, 再使用order by  数字列,字母列等 如果要把所有字母放在最后, 可以将本是字母值的在数列字设置一个非常大的的整数
      

  17.   

    恩,使用decode和substr再加上asc和desc能满足你的要求.
      

  18.   


    我刚接触oracle 可以提供下语句么?谢谢
      

  19.   

    可以自己来调整.
    SQL> select * from emp order by ename asc;
     
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7939 +1384      骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7938 -1384      骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
     7839 KING       PRESIDENT       1981-11-17    5000.00               10
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               10
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20
     7369 SMITH      CLERK      7902 1980-12-17     800.10               20
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
     7937 曹操       骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7936 吕布       骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7935 张辽       机械       7902 2010-5-18 9   1000.00    300.00     20
     
    19 rows selectedSQL> select * from emp desc;
     
    select * from emp desc
     
    ORA-00933: SQL command not properly ended
     
    SQL> select * from emp order by ename desc;
     
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7935 张辽       机械       7902 2010-5-18 9   1000.00    300.00     20
     7936 吕布       骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7937 曹操       骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
     7369 SMITH      CLERK      7902 1980-12-17     800.10               20
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               10
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
     7839 KING       PRESIDENT       1981-11-17    5000.00               10
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20
     7938 -1384      骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7939 +1384      骑兵       7902 2010-5-18 9   1000.00    300.00     20
     
    19 rows selected
     
    SQL> select * from emp order by decode(substr(ename,1,1),'-','张张张'||ename,'+','张张张'||ename , ename) desc;
     
    EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
    ----- ---------- --------- ----- ----------- --------- --------- ------
     7938 -1384      骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7939 +1384      骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7935 张辽       机械       7902 2010-5-18 9   1000.00    300.00     20
     7936 吕布       骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7937 曹操       骑兵       7902 2010-5-18 9   1000.00    300.00     20
     7521 WARD       SALESMAN   7698 1981-2-22     1250.00    500.00     30
     7844 TURNER     SALESMAN   7698 1981-9-8      1500.00      0.00     30
     7369 SMITH      CLERK      7902 1980-12-17     800.10               20
     7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20
     7934 MILLER     CLERK      7782 1982-1-23     1300.00               10
     7654 MARTIN     SALESMAN   7698 1981-9-28     1250.00   1400.00     30
     7839 KING       PRESIDENT       1981-11-17    5000.00               10
     7566 JONES      MANAGER    7839 1981-4-2      2975.00               20
     7900 JAMES      CLERK      7698 1981-12-3      950.00               30
     7902 FORD       ANALYST    7566 1981-12-3     3000.00               20
     7782 CLARK      MANAGER    7839 1981-6-9      2450.00               10
     7698 BLAKE      MANAGER    7839 1981-5-1      2850.00               30
     7499 ALLEN      SALESMAN   7698 1981-2-20     1600.00    300.00     30
     7876 ADAMS      CLERK      7788 1987-5-23     1100.00               20
     
    19 rows selected
     
    SQL>