国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

oracle 中幾種排序方法

2019-11-09 13:40:23
字體:
來源:轉載
供稿:網友

一、隨機排序:

select   *   from tablename order by dbms_random.value);

這種方法一般隨機取前幾行記錄比較有用。對于10W以上的記錄,采取抽樣的方式

select   *   from (select * from  tablename SAMPLE(0.01)) WHERE rownum <= 3;

二、Oracle中針對中文進行排序:

在oracle 9i之前,對中文的排序,是默認按2進制編碼來進行排序的. 9i時增加了幾種新的選擇:

1.按中文拼音進行排序:SCHINESE_PINYIN_M

2.按中文部首進行排序:SCHINESE_RADICAL_M

3.按中文筆畫進行排序:SCHINESE_STROKE_M

而oracle 9i是對中文的排序是默認按拼音排序(并不是指NLS_SORT = SCHINESE_PINYIN_M,而是說SQL中不指定NLS_SORT時對中文列排序時默認按拼音)的,跟之前的2進制編碼排序有所不同.

1.直接寫在sql中,例如:

1.SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_PINYIN_M');

2.SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_STROKE_M');

3.SELECT * FROM TEAM ORDER BY NLSSORT(排序字段名,'NLS_SORT = SCHINESE_RADICAL_M');

2.配置在初始化參數NLS_SORT中,這可以在數據庫創建時指定,也可以通過alter session來修改.如果是前者,則在所有session中生效.例如:

1.使用select * from NLS_SESSION_PARAMETERS;語句可以看到NLS_SORT的值.

2.更改配置文件:alter system set nls_sort='SCHINESE_PINYIN_M' scope=spfile;

3.更改session:alter SESSION set NLS_SORT = SCHINESE_PINYIN_M;

這里要額外注意一下性能問題,按oracle官方文檔的解釋,oracle在對中文列建立索引時,是按照2進制編碼進行排序的,所以如果NLS_SORT被設置為BINARY時,排序則可以利用索引.如果不是2進制排序,而是使用上面介紹的3種針對中文的特殊排序,則oracle無法使用索引,會進行全表掃描.這點一定要注意,多用plsql工具比較一下執行效率.解決方法是,在此列上建立linguistic index.例如:CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = SCHINESE_PINYIN_M'));

三、自定義排序:

Oracle可借助decode函數進行排序:

select * from (    select 'Nick' as item from dual    union all    select 'Viki' as item from dual    union all    select 'Glen' as item from dual    union all    select 'Robin' as item from dual    union all    select 'Total' as item from dual) PRe_taborder by decode(item, 'Viki', 1, 'Glen', 2, 'Robin', 3, 'Nick', 4, 'Total', 99);

另一種寫法:

SELECT * FROM (select '海爾' v,1 o from dualunion allselect '聯想' v,2 o from dualunion allselect '索尼' v,3 o from dual)order by instr('索尼,聯想,海爾',v)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰顺县| 桐庐县| 福贡县| 贵溪市| 武定县| 礼泉县| 香河县| 江孜县| 浮梁县| 桃园县| 德保县| 泗洪县| 峨山| 茶陵县| 阿拉善盟| 呼和浩特市| 宁强县| 宁陕县| 荆州市| 锡林郭勒盟| 壤塘县| 句容市| 石屏县| 苏尼特右旗| 威信县| 肇东市| 凌海市| 贺州市| 全椒县| 平和县| 南澳县| 尼木县| 平度市| 兖州市| 新乡市| 黔江区| 东乌| 绍兴市| 肇州县| 秭归县| 新田县|