1
創(chuàng)新互聯(lián)是一家專業(yè)提供興安企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都做網(wǎng)站、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為興安眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。
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 按照拼音排序
Oracle9i之前,中文是按照二進(jìn)制編碼進(jìn)行排序的。在oracle9i中新增了按照拼音、部首、筆畫排序功能。
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注冊表)
oracle按照指定順序進(jìn)行排序
實(shí)驗(yàn)如下:
1.新建表
CREATE TABLE BR_DICT(
ID number PRIMARY KEY NOT NULL,
D_ITEM VARCHAR2(32),
D_VALUE VARCHAR2(32),
D_TYPE VARCHAR2(32),
D_SORT number
)
2.插入數(shù)據(jù)
insert into br_dict(id, d_item,d_value,d_type,d_sort) values
(10, '10', '測試1', '', 0);
insert into br_dict(id, d_item,d_value,d_type,d_sort) values
(11, '11', '測試2', '', 1);
insert into br_dict(id, d_item,d_value,d_type,d_sort) values
(12, '12', '測試3', '', 2);
insert into br_dict(id, d_item,d_value,d_type,d_sort) values
(13, '13', '測試4', '', 3);
insert into br_dict(id, d_item,d_value,d_type,d_sort) values
(14, '14', '測試5', '', 4);
insert into br_dict(id, d_item,d_value,d_type,d_sort) values
(15, '15', '測試6', '', 5);
3.兩種查詢方式
a.instr函數(shù)在Oracle/PLSQL中是返回要截取的字符串在源字符串中的位置來自定義排序方式
select * from br_dict d where d.d_value like '%測試%' order by instr( '3,1,2,0,5,4',rtrim(cast(d_sort as nchar)));
b.運(yùn)行decode定義某個(gè)字符的排序位置類似的實(shí)現(xiàn)排序方式
select * from br_dict d where d.d_value like '%測試%' order by decode(d_sort, '3', '01', '2', '02', '1', '03', '0', '04', '5', '05', '4', '06');
可以通過 “order by 字段名 asc (desc)” 命令進(jìn)行排序。
sql:select * from tablename order by id DESC;
用 DESC 表示按倒序排序(即:從大到小排序) ,用 ACS 表示按正序排序(即:從小到大排序)。
1、首先在oracle建立數(shù)據(jù)表的時(shí)候,對(duì)表的命名有以下規(guī)范:以字母開頭表名長度不能超過30個(gè)字符,不能使用oracle保留關(guān)鍵字,可以使用A-Z,a-z,0-9,#,$等。
2、如果表名中包含特殊字符是直接報(bào)錯(cuò)的。如下圖使用了? *。
3、在建立表的時(shí)候,數(shù)字也是不能使用表名的開始的。
4、但如果使用雙引號(hào)對(duì)表名進(jìn)行規(guī)范的話,是可以建立以數(shù)字或者包含特殊字符的表名的。
5、過這樣建立的表名,在查詢數(shù)據(jù)的時(shí)候是非常麻煩的,查詢時(shí)也要加雙引號(hào)。而且這樣建立的表名,在項(xiàng)目運(yùn)行的過程中也非常容易造成各種麻煩,所以盡量不要使用。
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)字段順序的修改。