Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。
成都创新互联专注于企业成都全网营销、网站重做改版、济南网站定制设计、自适应品牌网站建设、H5响应式网站、商城网站建设、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为济南等各大城市提供网站开发制作服务。
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注册表)
比如有个字段(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的,其他数据看数据库找函数,意思就那么样了
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#列就是字段的顺序列,可以通过修改这列的值来实现字段顺序的修改。
可以啊,你在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
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对查询结果进行排序时,被排序的栏位存在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);