oracle 排序问题 还是40分那个帖子的排序问题 求一个oracle 语句 支持数字,汉字首字母,正负数字,字母 升降排序 最好一个语句就能解决 最好不要分解开来 高手快点看到我的贴!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 desc asc 针对 字符串 和数字都可以排序 试试吧 select × from 表 order by 字段 asc /desc oracle 的order by 会自动进行排序,无论你是数字、字母还是中文。 拼音排序select * from t1 order by nlssort(c1,'NLS_SORT=SCHINESE_PINYIN_M'); order by 字段 desc/asc,字段 desc/asc...... 我在机子上试过 desc asc 是不支持正负数排序的请问大家就没有支持正负数排序的么?难道你们的desc asc支持正负数排序么? 你针对正负数自己再做一个排序列不就好了?用到的函数可能有:translate:用来判断该值是否是数值。substr:第一位"-"或"+"号decode(或case when):是否数值、中文、字母等等时的排序级别.简单的思想就是:把该字段的值按照数值、中文、英文分组给予不同的排序级别,然后再合并起来。 SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序 SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序 SCHINESE_PINYIN_M 按照拼音排序,系统的默认排序方式为拼音排序如果按笔画升序排列如下: select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M'); 倒序可以用desc控制 .... order by 数字,汉字首字母,正负数字,字母 asc/desc 很明显,你这个是个varchar的字段,所以oracle先判断第一个字符是'-',然后再根据后面的数字进行排序,所以,-2会排在-1前面,而不是你期待的-1排在-2前面。暂无解决方案,期待高人出现解决问题。 大侠 其实我要的就是这个 因为接触oracle时间很短 实战经验全无 希望能得到帮助 最好能封装一个一系列排序判断 Number(10,2)拍出来的正数 负数 不是前后的问题 而是错乱的问题 ++--+++- 你发错地方了,oracle的问题发到java来干嘛,发到oracle区自然大把高手 转到oracle去 嘿嘿 oracle的高手们 快来 !! 这个应该可以自定义的函数来解决。 或者使用变通的方法将值按类型分成多列, 再使用order by 数字列,字母列等 如果要把所有字母放在最后, 可以将本是字母值的在数列字设置一个非常大的的整数 恩,使用decode和substr再加上asc和desc能满足你的要求. 我刚接触oracle 可以提供下语句么?谢谢 可以自己来调整.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> 在centos6.2,64位操作系统上安装oracle11gR2,出错,抛异常!该如何处理?? 菜菜的问题 ORACLE 数据同步 请教 BOM SQL展开问题 大侠好!帮忙看看这个SQL如何写 oracle分组&&字符串 求助 如何定时导入txt文件数据到oracle中 高分跪求!!!一个存储过程或SQL,请高手指点。 oracle816配置问题 oracle 11g 闪回 数据库 设计:一用户多帐户表设计 高分急寻sql合并的写法?
oracle 的order by 会自动进行排序,无论你是数字、字母还是中文。
请问大家就没有支持正负数排序的么?
难道你们的desc asc支持正负数排序么?
用到的函数可能有:
translate:用来判断该值是否是数值。
substr:第一位"-"或"+"号
decode(或case when):是否数值、中文、字母等等时的排序级别.简单的思想就是:把该字段的值按照数值、中文、英文分组给予不同的排序级别,然后再合并起来。
SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序
SCHINESE_PINYIN_M 按照拼音排序,系统的默认排序方式为拼音排序
如果按笔画升序排列如下:
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');
倒序可以用desc控制
暂无解决方案,期待高人出现解决问题。
大侠 其实我要的就是这个 因为接触oracle时间很短 实战经验全无 希望能得到帮助 最好能封装一个一系列排序判断
Number(10,2)
拍出来的正数 负数 不是前后的问题 而是错乱的问题 ++--+++-
你发错地方了,oracle的问题发到java来干嘛,发到oracle区自然大把高手
转到oracle去 嘿嘿
我刚接触oracle 可以提供下语句么?谢谢
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>