使用order by 按照指定顺序排序或自定义顺序排序
我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出):
一、如果我们只是对于在某个程序中的应用是需要按照如下的方式排序,我们只需在SQL语句级别设置排序方式:
1、按照oracled的默认方式排序:select * from table_name order by col_name (desc|asc);(默认为升序或无序对于升降只有在数字字段);
2、按照自定义的顺序排序: select * from table_name order by decode(col_name,'value1',1,value2',2,value3',3,value4',4,...valueN',N);
二、如果我们只是对于在某个程序中的应用是需要按照如下设置的方式排序,我们只需在SQL语句级别设置排序方式(一般没有设置之前我们系统的中文默认排序方式是按照拼音排序 ):
1、按照拼音排序: select * fromtable_name order by nlssort(col_name,'NLS_SORT=SCHINESE_PINYIN_M');
2、按照笔划排序: select * from table_name order by nlssort(col_name,'NLS_SORT=SCHINESE_STROKE_M');
3、按照部首排序: select * from table_name order by nlssort(col_name,'NLS_SORT=SCHINESE_RADICAL_M');
注意:但是在数据量比较大情况下查询速度会很慢,需要进行进一步优化,按oracle官方文档的解释,oracle在对中文列建立索引时,是按照2进制编码进行排序的,所以如果NLS_SORT被设置为BINARY时,排序则可以利用索引.如果不是2进制排序,而是使用上面介绍的3种针对中文的特殊排序,则oracle无法使用索引,会进行全表扫描.解决方法是,在此列上建立linguistic index.例如:CREATE INDEX nls_index ON my_table (NLSSORT(name, 'NLS_SORT = SCHINESE_PINYIN_M'));
引用原文:Note:
Setting NLS_SORT to anything other than BINARY causes a sort to use a full table scan, regardless of the path chosen by the optimizer. BINARY is the exception because indexes are built according to a binary order of keys. Thus the optimizer can use an index to satisfy the ORDER BY clause when NLS_SORT is set to BINARY. If NLS_SORT is set to any linguistic sort, the optimizer must include a full table scan and a full sort in the execution plan.
三、如果我们在整个会话中都要使用特定的方式排序的话,我们需要在Session级别的设置字段的默认排序方式:
1.按拼音:alter session set nls_sort = SCHINESE_PINYIN_M;
2.按笔画:alter session set nls_sort = SCHINESE_STROKE_M;
3.按偏旁:alter session set nls_sort = NLS_SORT=SCHINESE_RADICAL_M;
四、如果我们需要对整个数据做指定的排序方式,就需要修改oracle 服务器系统参数(一般这种方式我们使用的比较少):
1. win系统修改注册表 HKLC\SOFTWARE\ORACLE\home0\NLS_SORT
2.其他修改配置set NLS_SORT=SCHINESE_RADICAL_M export NLS_SORT
使用order by 按照指定顺序排序或自定义顺序排序相关推荐
- oracle怎么自定义排序,ORACLE自定义顺序排序
ORACLE可以借助DECODE函数,自定义顺序排序: select * from ( select 'Nick' as item from dual union all select 'Viki' ...
- SQL学习之使用order by 按照指定顺序排序或自定义顺序排序
我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): 一.如果我们只是对于在某个程序中的应用 ...
- order by 按照指定顺序排序或自定义顺序排序
我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): 一.如果我们只是对于在某个程序中的应用 ...
- php对自定义数组进行排序,按照自定义顺序对数组的php数组排序
您可以使用usort()精确地指定数组的排序方式.在这种情况下,可以在比较函数中使用$ order数组. 下面的例子使用closure使生活更容易. $order = array(3452342, 5 ...
- php修改mysql排序_php – 自定义MySQL排序
我有一个需要自定义排序的查询,修剪到最小的东西,如: SELECT u.*, p.*, p.id as product_id FROM users u, products p WHERE u.id = ...
- numpy np.sort()函数(指定对某一轴进行排序,返回数组的排序副本)(成对数组不要用这个排,用哪个啥lexsort()或argsort()都行)
指定对哪一层进行排序,如果需排序的是多维数组,特别是那种np.sort()貌似不太友好 from numpy\core\fromnumeric.py @array_function_dispatch( ...
- 8、查询优化-关联查询优化-子查询优化-Order by 关键字优化-Group by 关键字优化-双路排序和单路排序
8.查询优化 8.1.准备数据 8.1.1.建表 CREATE TABLE `dept` (`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,`deptName` VAR ...
- 查询某一支接口,指定时间段的数据 按分钟排序
--查询某一支接口,指定时间段的数据 按分钟排序 select a.servicename,reqdate,substr(reqtime,1,5),count(1)from 表名 awhere ser ...
- Set和存储顺序深入探讨、SortedSet排序的示例
2019独角兽企业重金招聘Python工程师标准>>> Set和存储顺序深入探讨.SortedSet排序的示例 package org.rui.collection2.set;imp ...
最新文章
- 从模板方法模式到JDBCTemplate
- 我们要在离职时,优雅地说再见!
- Windows平台下SVN安装配置及使用
- python-标识符与变量-标识符的命名规范
- 蚂蚁上市或诞生近60位亿万富翁;特斯拉回应25万元团购Model3;Python 3.8.5 发布| 极客头条
- 抢占计算机与通信设备未来产业制高点 ——《信息产业发展指南》解读
- Android开源项目推荐之「最好用的Log」
- 图像处理常用数据集Kodak24和McMaster,0积分大家拿去
- 电脑桌面的计算机图双击打不开,win10双击电脑图标打不开必须右键打开
- latex插入pdf
- JavaWEB复习汇总
- 计算机登录网站慢手机快,手机WiFi网速慢,简单输入几个数字立马变快!
- vue按住shift键多选(以element框架的table为例)
- 木瓜 移动端 java 高工
- 国产手机已经用上了 120W 快充技术,苹果还在用20W的原因一
- opencv+python机读卡识别(一)预处理
- CC2530关于端口中断常用的寄存器
- JavaWeb 入门级项目实战 -- 文章发布系统 (第六节)
- struct sockaddr和struct sockaddr_in的强制类型转换
- 【极简版GH60】【GH60剖析】【二】原理图的分析