淘先锋技术网

首页 1 2 3 4 5 6 7

oracle怎么排序

Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。

1、设置NLS_SORT参数值

SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序 SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序 SCHINESE_PINYIN_M 按照拼音排序

2、Session级别的设置,修改ORACLE字段的默认排序方式:

按拼音:alter session set nls_sort = SCHINESE_PINYIN_M;

按笔画:alter session set nls_sort = SCHINESE_STROKE_M;

按偏旁:alter session set nls_sort = NLS_SORT=SCHINESE_RADICAL_M;

3、语句级别设置排序方式:

按照笔划排序 select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');

按照部首排序 select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');

按照拼音排序 此为系统的默认排序方式

select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');

4、修改系统参数(数据库所在操作系统):

set NLS_SORT=SCHINESE_RADICAL_M export NLS_SORT (sh) setenv NLS_SORT SCHINESE_RADICAL_M (csh) HKLC\SOFTWARE\ORACLE\home0\NLS_SORT (win注册表)

Oracle中排序如何指定某些值在最前或最后

比如有个字段(ID)值为 1,2,3,4,5,现在要把这个字段第四个‘4’排到最后于是乎我可以

select * from test_table

order by decode(id,4,100,id)

或者

select * from test_table

order by replace(id,4,100)

当然不止这两种了,语句中的‘100’保证是你这些值中最大或最小值就行,排序根据需要升序降序(desc),我的语句是属于oracle的,其他数据看数据库找函数,意思就那么样了

oracle中某个表中如何让一些数据按某一顺序排列.其余不用管

1.'gyzl_bzpwl_tb'

为要修改的表名,注意表名一定要大写!此句可以获取表的id。

select

object_id

from

all_objects

where

object_name='gyzl_bzpwl_tb'

2.查看表中的字段名和序号,其中后面的条件就是我们第一步中查出来的表id

select

obj#,col#,name

from

sys.col$

where

obj#=38370; 

3.直接修改表

sys.col,col#列就是字段的顺序列,可以通过修改这列的值来实现字段顺序的修改。

oracle中排序能固定吗?

可以啊,你在order by的时候指定排序的顺序

先跑这个:

select * from (select 1 id,'赵六' name from dual union

select 2,'王五' from dual union

select 3,'李四' from dual union

select 4,'张三' from dual)

再跑这个比对下:

select * from (select 1 id,'赵六' name from dual union

select 2,'王五' from dual union

select 3,'李四' from dual union

select 4,'张三' from dual)

order by case name when '张三' then 1

when '李四' then 2

when '王五' then 3

when '赵六' then 4 end

如何实现Oracle的自定义排序

1

2

3

4

5

6

7

8

9

10

11

普通排序SQL是这样的:SELECT NAME FROM TABLE ORDER BY NAME;这时候我们需要按照自己定义的NAME的排序规则进行排序,如按照某个字典ARRAY进行排序,就需要用个临时表来完成如建立表:C_SORT_Tcreatetable C_SORT_T

(

SORT_ID NUMBER(10),

SORT_NAME VARCHAR2(20),

SORT_SEQ NUMBER(10)

)然后把原有的SQL联合排序表进行查询,然后用SORT_SEQ排序就可以了。 如果是SORT array是不固定,而是在排序前传入SQL?该怎么办?如果排序的array不大的话,可以用DECODE来达到要求,如下:SELECT NAME FROM TABLE排序:SELECT NAME,DECODE(NAME,"ARRAY[0]",1,"ARRAY[1]",2,....,9999) SEQ FROM TABLE ORDER BY SEQ

---

SCHINESE_RADICAL_M 按照部首(第一顺序)、笔划(第二顺序)排序

SCHINESE_STROKE_M 按照笔划(第一顺序)、部首(第二顺序)排序

SCHINESE_PINYIN_M 按照拼音排序

Oracle中排序如何指定?某些值在最前或最后?

Oracle排序默认的是升序的。

oracle对查询结果进行排序时,被排序的栏位存在null值,且要指定NULL值排在最前面或者最后面。

关键字:NullsFirst;NullsLast

默认情况:null默认为最大值(即:asc升序小--大,null值排在最后;desc降序大--小,null值排在最前面)

指定: 

1.OracleOrderby支持的语法 

2.指定Nullsfirst则表示null值的记录将排在最前(不管是asc还是desc) 

3.指定Nullslast则表示null值的记录将排在最后(不管是asc还是desc)

语法举例:(Table:Tab_A有部分空值的栏位Col_A) 

select*fromTab_AorderbyTab_A.Col_A(asc/desc)nullsfirst------null值排在最前面。

select*fromTab_AorderbyTab_A.Col_A(asc/desc)nullslast------null值排在最后面。

其他方法: 

在orderby的时候,用Nvl、NVL2、Decode、case.....when....end;等函数对栏位的null值进行处理 

例如:select*fromTab_AorderbyNVL(Tab_A.Col_A,'abc')(asc/desc);