我们通常须要依据客户需求对于查询出来的结果给客户提供自己定义的排序方式,那么我们通常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. nyist oj 115 城市平乱 (最短路径)

    城市平乱 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 南将军统领着N个部队.这N个部队分别驻扎在N个不同的城市. 他在用这N个部队维护着M个城市的治安.这M个城市 ...

  2. leetCode(32):Power of Two

    Given an integer, write a function to determine if it is a power of two. 2的幂的二进制表示中,必定仅仅有一个"1&q ...

  3. cocos2dx项目创建

    射击类游戏文档 作者:浙江传媒学院  新媒体  张勇 1>编译环境 首先我们先去cocos2dx官网上下载cocos2dx最新版本号 http://www.cocos2d-x.org/ 我下载的 ...

  4. mysqlbinlog高速遍历搜索记录

    目标,开发者说有个数据莫名其妙加入了.可是不知道是从哪里加入的.并且应用功能里面不应该加入这种数据,为了查清楚来源,所以我就准备去binlog里面找了.可是binlog有好几个月的数,我这样一个个my ...

  5. gwt学习资料

    学习资料: 2 3

  6. MVC/MVP/MVVM区别——MVVM就是angular,视图和数据双向绑定

    摘自:http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html 一.MVC MVC模式的意思是,软件可以分成三个部分. 视图(View):用户界面 ...

  7. 23.QFile遍历

    #include "mainwindow.h" #include <QApplication> #include <QDebug> #include < ...

  8. BZOJ 3052 树上带修莫队

    思路: 就是把带修莫队移到了树上 块的大小开到(n^2/3)/2 比较好- 这是一个卡OJ好题 //By SiriusRen #include <cmath> #include <c ...

  9. iOS 内网内测应用发布

    之前测试时,iOS 开发会把测试版本上传到蒲公英上,可以很方便的获取.后来认为不安全,万一测试版泄露了会有风险,就又回到了解放前,测试跑到开发那里编包.想过把手机越狱安装开发的编的 ipa 包,这样测 ...

  10. update没带where,寻找问题的思路

    数据库版本:5.6.16 前几天,在测试环境中,不知道为什么突然之间,所有的一个字段值全部变成了12,需要将备份还原后开发重新清理垃圾数据并开始测试. 在开发提供 SQL语句的情况下,能否查到是谁做了 ...