Oracle9i之前,中文是按照二進(jìn)制編碼進(jìn)行排序的。在oracle9i中新增了按照拼音、部首、筆畫排序功能。
成都創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、濟(jì)南網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5響應(yīng)式網(wǎng)站、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為濟(jì)南等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
1、設(shè)置NLS_SORT參數(shù)值
SCHINESE_RADICAL_M 按照部首(第一順序)、筆劃(第二順序)排序 SCHINESE_STROKE_M 按照筆劃(第一順序)、部首(第二順序)排序 SCHINESE_PINYIN_M 按照拼音排序
2、Session級(jí)別的設(shè)置,修改ORACLE字段的默認(rèn)排序方式:
按拼音: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、語句級(jí)別設(shè)置排序方式:
按照筆劃排序 select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_STROKE_M');
按照部首排序 select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_RADICAL_M');
按照拼音排序 此為系統(tǒng)的默認(rèn)排序方式
select * from dept order by nlssort(name,'NLS_SORT=SCHINESE_PINYIN_M');
4、修改系統(tǒng)參數(shù)(數(shù)據(jù)庫所在操作系統(tǒng)):
set NLS_SORT=SCHINESE_RADICAL_M export NLS_SORT (sh) setenv NLS_SORT SCHINESE_RADICAL_M (csh) HKLC\SOFTWARE\ORACLE\home0\NLS_SORT (win注冊(cè)表)
比如有個(gè)字段(ID)值為 1,2,3,4,5,現(xiàn)在要把這個(gè)字段第四個(gè)‘4’排到最后于是乎我可以
select * from test_table
order by decode(id,4,100,id)
或者
select * from test_table
order by replace(id,4,100)
當(dāng)然不止這兩種了,語句中的‘100’保證是你這些值中最大或最小值就行,排序根據(jù)需要升序降序(desc),我的語句是屬于oracle的,其他數(shù)據(jù)看數(shù)據(jù)庫找函數(shù),意思就那么樣了
1.'gyzl_bzpwl_tb'
為要修改的表名,注意表名一定要大寫!此句可以獲取表的id。
select
object_id
from
all_objects
where
object_name='gyzl_bzpwl_tb'
2.查看表中的字段名和序號(hào),其中后面的條件就是我們第一步中查出來的表id
select
obj#,col#,name
from
sys.col$
where
obj#=38370;
3.直接修改表
sys.col,col#列就是字段的順序列,可以通過修改這列的值來實(shí)現(xiàn)字段順序的修改。
可以啊,你在order by的時(shí)候指定排序的順序
先跑這個(gè):
select * from (select 1 id,'趙六' name from dual union
select 2,'王五' from dual union
select 3,'李四' from dual union
select 4,'張三' from dual)
再跑這個(gè)比對(duì)下:
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;這時(shí)候我們需要按照自己定義的NAME的排序規(guī)則進(jìn)行排序,如按照某個(gè)字典ARRAY進(jìn)行排序,就需要用個(gè)臨時(shí)表來完成如建立表:C_SORT_Tcreatetable C_SORT_T
(
SORT_ID NUMBER(10),
SORT_NAME VARCHAR2(20),
SORT_SEQ NUMBER(10)
)然后把原有的SQL聯(lián)合排序表進(jìn)行查詢,然后用SORT_SEQ排序就可以了。 如果是SORT array是不固定,而是在排序前傳入SQL?該怎么辦?如果排序的array不大的話,可以用DECODE來達(dá)到要求,如下: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排序默認(rèn)的是升序的。
oracle對(duì)查詢結(jié)果進(jìn)行排序時(shí),被排序的欄位存在null值,且要指定NULL值排在最前面或者最后面。
關(guān)鍵字:NullsFirst;NullsLast
默認(rèn)情況:null默認(rèn)為最大值(即: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的時(shí)候,用Nvl、NVL2、Decode、case.....when....end;等函數(shù)對(duì)欄位的null值進(jìn)行處理?
例如:select*fromTab_AorderbyNVL(Tab_A.Col_A,'abc')(asc/desc);