oracle 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
oracle order by 自定义的更多相关文章
- mysql如何用order by 自定义排序
mysql如何用order by 自定义排序 id name roleId aaa bbb ccc ddd eee ,MySQL可以通过field()函数自定义排序,格式:field(value,st ...
- Oracle Order Management DropShip Flow for R12
Oracle Order Management DropShip Flow for R12 Email ThisBlogThis!Share to TwitterShare to FacebookSh ...
- ORACLE ORDER BY用法总结
order by后面的形式却比较新颖(对于我来说哦),以前从来没看过这种用法,就想记下来,正好总结一下ORDER BY的知识. 1.ORDER BY 中关于NULL的处理 缺省处理,Oracle在Or ...
- Oracle存储过程和自定义函数
新博客文章链接,欢迎大家评论探讨 概述 存储过程和存储函数是指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数. 异同点: 存储过程和存储函数的相同点:完成特定功能的程序. 存储过程和存储 ...
- oracle order by 字段不能为空 为空速度慢 不走索引
oracle order by 字段不能为空 为空速度慢 不走索引
- 【网络收集】order by 自定义排序
使用order by排序,有时候不是根据字符或数字顺序,而是根据实际要求排序. 例如有客户A,B,C,我希望排序结果是B,C,A,那么就要通过自定义的规则排序. 第一种方法,可以构造一张映射表,将客户 ...
- order by 自定义排序
使用order by排序,有时候不是根据字符或数字顺序,而是根据实际要求排序. 例如有客户A,B,C,我希望排序结果是B,C,A,那么就要通过自定义的规则排序. 第一种方法,可以构造一张映射表,将客户 ...
- Oracle order by case when 多条件排序
ORACLE sql 排序 根据两个条件排序,根据id号由小到大排序,同时country字段是北京的排最前面前面,其次上海,..大连,最后是其他城市,怎么写? 写法如下:select * from p ...
- Jpa 重写方言dialect 使用oracle / mysql 数据库自定义函数
在使用criteria api进行查询时 criteriaBuilder只提供了一个部分标准的sql函数,但当我们需要使用oracle特有的行转列函数wm_concat或 mysql特有的行转列函数g ...
随机推荐
- 如何让JavaScript元素运动起来 ?
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Node、Document关系的探究
上图来自于<JavaScript权威指南(第六版)>P375 受到上图的启发,写了如下测试代码: var head = document.getElementsByTagName(&quo ...
- 前端vscode常用插件
Auto Rename Tag 这是一个html标签的插件,可以让你修改一边标签,另外一边自动改变. Beautify 格式化代码插件 Braket Pair Colorizer 给js文件中的每一个 ...
- vue 使用 npm run dev命令后 自动打开浏览器
1.使用vue-cli 老版本构建项目时, 可修改config文件夹下index.js文件 autoOpenBrowser 属性给为 true 即可 使用vue-cli 3.x 版本后,所有的配置项均 ...
- kean的博客今天开通了,happy 一下
希望以后可以日日勤勉,孜孜不倦的记录我的一生!
- python开发工具-pycharm专业版
一.pycharm是什么 维基百科的定义: PyCharm是一个用于计算机编程的集成开发环境,主要用于Python语言开发,由捷克公司JetBrains开发,提供代码分析.图形化调试器,集成测试器.集 ...
- 记一次 Vultr配置
这里不想排版,因为心情复杂. 第一次搞这个VPS,真的是很气人,由于中英文的关系我一开始就误操作了,让VPS一直挂载着Ubuntu18.10,所以系统一直是在光盘的引导界面,这个问题知道我注册后的四个 ...
- C学习笔记-指针
指针的概念 指针也是一个变量,指针变量的值是另一个变量的地址 换句话说就是,指针存放的是一个内存地址,该地址指向另一块内存空间 指针变量的定义 指向一个变量的变量 int *p = NULL; p = ...
- python random 的用法
python random的里面的方法其实是Random实例化的对象. 里面几个常用的几个方import random print( random.randint(1,10) ) # 产生 1 到 1 ...
- js中‘0’到底是 true 还是 false
if ('0') alert("'0' is true"); if ('0' == false) alert("'0' is false");结果是,两次都 ...