国产探花免费观看_亚洲丰满少妇自慰呻吟_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)


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿图什市| 黑水县| 文安县| 徐汇区| 塘沽区| 淮北市| 奈曼旗| 共和县| 尉氏县| 新闻| 措美县| 博兴县| 白沙| 浙江省| 津市市| 陇南市| 屏边| 象山县| 叙永县| 嘉峪关市| 高邮市| 万载县| 焦作市| 陆川县| 枣庄市| 金寨县| 安岳县| 且末县| 邢台县| 崇文区| 哈尔滨市| 启东市| 苍南县| 千阳县| 宁乡县| 镶黄旗| 应用必备| 定西市| 韩城市| 红安县| 南安市|