我们通常须要依据客户需求对于查询出来的结果给客户提供自己定义的排序方式,那么我们通常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 server系统參数(一般这样的方式我们使用的比較少):    

 1. win系统改动注冊表 HKLC\SOFTWARE\ORACLE\home0\NLS_SORT

2.其它改动配置set NLS_SORT=SCHINESE_RADICAL_M export NLS_SORT

SQL学习之使用order by 依照指定顺序排序或自己定义顺序排序的更多相关文章

  1. (013)每日SQL学习:日期的各种计算

    1.确定两个日期之间的工作日天数 --确定两个日期之间的工作日天数with x0 as (select to_date('2018-01-01','yyyy-mm-dd') as 日期 from du ...

  2. [SQL] SQL学习笔记之基础操作

    1 SQL介绍 SQL 是用于访问和处理数据库的标准的计算机语言.关于SQL的具体介绍,我们通过回答如下三个问题来进行. SQL 是什么? SQL,指结构化查询语言,全称是 Structured Qu ...

  3. 基于实际项目的SQL学习总结

    青云   随笔 - 2, 文章 - 0, 评论 - 1, 引用 - 0 一个项目涉及到的50个Sql语句(整理版) /* 标题:一个项目涉及到的50个Sql语句(整理版) 说明:以下五十个语句都按照测 ...

  4. sql 学习笔记 档

    从下面的内容 3c   school 1:Sql 它分为两部分: 6 2:查询 7 3:插入: 9 4:数据库更新 UPDATE 9 5:删除 DELETE 10 6:Sql TOP 子句: 10 7 ...

  5. TERADATA SQL学习随笔<一>

    此博客内容简介及目录 http://www.cnblogs.com/weibaar/p/6644261.html 最近在TERADATA环境学习SQL.在这里记录一下学习中查过的知识点,作为备案. 目 ...

  6. SQL学习笔记五之MySQL索引原理与慢查询优化

    阅读目录 一 介绍 二 索引的原理 三 索引的数据结构 四 聚集索引与辅助索引 五 MySQL索引管理 六 测试索引 七 正确使用索引 八 联合索引与覆盖索引 九 查询优化神器-explain 十 慢 ...

  7. SQL学习笔记四(补充-1-1)之MySQL单表查询补充部分:SQL逻辑查询语句执行顺序

    阅读目录 一 SELECT语句关键字的定义顺序 二 SELECT语句关键字的执行顺序 三 准备表和数据 四 准备SQL逻辑查询测试语句 五 执行顺序分析 一 SELECT语句关键字的定义顺序 SELE ...

  8. spark SQL学习(认识spark SQL)

    spark SQL初步认识 spark SQL是spark的一个模块,主要用于进行结构化数据的处理.它提供的最核心的编程抽象就是DataFrame. DataFrame:它可以根据很多源进行构建,包括 ...

  9. SQL学习(时间,存储过程,触发器)

    SQL学习 几个操作时间的函数 --datapart 获取时间中的年月日时分秒等部分 select DATEPART(year,current_timestamp); select DATEPART( ...

随机推荐

  1. pl/sql输入括号后卡顿的解决方式

    pl/sql输入括号后卡顿的解决方式 学习了:https://zhidao.baidu.com/question/298275368.html 工具->首选项->用户界面->代码助手 ...

  2. 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...

  3. C++实现位数组

    当我们遇到大量整数排序时候为了节省内存空间我们能够考虑使用bit数组来实现,缺点是其仅仅适用于正整数. 思想: 在32位系统一个int类型占4个字节,按位来计算一个int类型能够记录32个数.因此,採 ...

  4. UVA - 11722 Joining with Friend 几何概率

                            Joining with Friend You are going from Dhaka to Chittagong by train and you ...

  5. notepad++ 查找引用(Find Reference)(适用于c c++及各类脚本比如lua、python等)

    在程序开发过程中,程序员经常用到的一个功能就是查找引用(Find Reference),Visual Studio里面的对应功能是“查找所有引用”(Find All References). 我在使用 ...

  6. POJ 3233 矩阵快速幂&二分

    题意: 给你一个n*n的矩阵 让你求S: 思路: 只知道矩阵快速幂 然后nlogn递推是会TLE的. 所以呢 要把那个n换成log 那这个怎么搞呢 二分! 当k为偶数时: 当k为奇数时: 就按照这么搞 ...

  7. Hibernate框架学习(六)——一对多&多对一关系

    一.关系表达 1.表中的表达 2.实体中的表达 3.orm元数据中的表达 一对多:(在Customer.hbm.xml中添加) 多对一:(在LinkMan.hbm.xml中添加) 最后别忘了在hibe ...

  8. pgpool中的配置参数的定义

    /* * configuration parameters */typedef struct {    char *listen_addresses;            /* hostnames/ ...

  9. ServiceStack.Redis之IRedisClient(转载)

    一.属性 IRedisClient的属性如下: 属性 说明 ConnectTimeout  连接超时 Db 当前数据库的ID或下标 DbSize  当前数据库的 key 的数量 HadExceptio ...

  10. 备份和恢复ZBrush文件

    ZBrush可以自动保存绘图的备份副本,并在发生系统错误时提醒您恢复备份副本.当ZBrush软件遇到崩溃.导致错误.非正常退出的时候,可能之前所做的努力就会功亏一篑,那么,在ZBrush软件中能否将文 ...