我们通常须要依据客户需求对于查询出来的结果给客户提供自己定义的排序方式,那么我们通常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. asp.net学习指南

    个人总结了一些不错的基础视频教程 视频链接地址(猛戳这里)

  2. 原来C++之父在大摩工作呀,并且还是总经理。。

    摩根士丹利信息技术部门简历接收即将截止.请同学们抓紧投递 摩根士丹利9月.10月将在中国各大高校举办包含技术讲座.信息分享会以及校园宣讲会在 内的一系列校园活动.同学们将有机会和摩根士丹利高管以及返校 ...

  3. scikit-learn系列之如何存储和导入机器学习模型

    scikit-learn系列之如何存储和导入机器学习模型   如何存储和导入机器学习模型 找到一个准确的机器学习模型,你的项目并没有完成.本文中你将学习如何使用scikit-learn来存储和导入机器 ...

  4. 33.Qt模型与视图

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

  5. Spark on YARN运行模式(图文详解)

    不多说,直接上干货! 请移步 Spark on YARN简介与运行wordcount(master.slave1和slave2)(博主推荐) Spark on YARN模式的安装(spark-1.6. ...

  6. SQLSERVER 链接服务器执行存储过程

    1.创建链接服务器 exec sp_addlinkedserver 'server_tmp','','SQLOLEDB','192.168.1.1' -- server_tmp 为别名 exec sp ...

  7. ubuntu16.04 安装 go

    1,下载go安装包wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz 2,解压 sudo tar -C /usr ...

  8. js-apply call bind 浅析

    call 1.第一个参数指定了this,第二个参数传给this,也就是call前面的函数,作为他的参数第三个参数也一样 指定了this,就是执行环境,greet的this在i里面找 function ...

  9. Android PullToRrefresh 自定义下拉刷新动画 (listview、scrollview等)

    PullToRefreshScrollView 自定义下拉刷新动画,只需改一处. 以下部分转载自http://blog.csdn.net/superjunjin/article/details/450 ...

  10. net-speeder 安装

    net-speeder net-speeder 在高延迟不稳定链路上优化单线程下载速度 项目由https://code.google.com/p/net-speeder/ 迁入 A program t ...