【oracle】oracle按照某字段指定顺序排序
目录
- 方案一、通过order by instr实现指定顺序排序
- 方案二:通过order by decode
- 补充:通过拼音、比划、部首排序方法
- 使用拼音排序
- 使用部首排序
- 使用笔画数排序
在做报表展现时,会遇到这样的需求,按照某个字段指定的顺序进行排序展示,比如按照面积段从大到小进行排序,这种需求如果直接使用order by 进行排序,对于字符串是按照字典顺序进行排序的,并不是我们想要的顺序排序,oracle提供了两种方法可以实现该需求:
先准备测试数据
drop table BR_DICT;
create table br_dict(
xl varchar2(32) not null,
mjd varchar2(32),
zb number(4,2)
);insert into br_dict(xl, mjd, zb) values
('系列一', '≤60㎡', 2.05);
insert into br_dict(xl, mjd, zb) values
('系列一', '60-90㎡', 7.04);
insert into br_dict(xl, mjd, zb) values
('系列一', '90-120㎡', 36.92);
insert into br_dict(xl, mjd, zb) values
('系列一', '120-144㎡', 39.82);
insert into br_dict(xl, mjd, zb) values
('系列一', '144-180㎡', 9.41);
insert into br_dict(xl, mjd, zb) values
('系列一', '180-220㎡', 2.6);
insert into br_dict(xl, mjd, zb) values
('系列一', '>220㎡', 2.15);
insert into br_dict(xl, mjd, zb) values
('列一', '>220㎡', 2.15);
insert into br_dict(xl, mjd, zb) values
('一', '180-220㎡', 2.6);
insert into br_dict(xl, mjd, zb) values
('二', '144-180㎡', 9.41);
方案一、通过order by instr实现指定顺序排序
select * from br_dict torder by instr('≤60㎡,60-90㎡,90-120㎡,120-144㎡,144-180㎡,180-220㎡,>220㎡',mjd)
;result:
系列一 ≤60㎡ 2.05
系列一 60-90㎡ 7.04
系列一 90-120㎡ 36.92
系列一 120-144㎡ 39.82
二 144-180㎡ 9.41
系列一 144-180㎡ 9.41
一 180-220㎡ 2.6
系列一 180-220㎡ 2.6
系列一 >220㎡ 2.15
列一 >220㎡ 2.15
注意:用order by instr时字段名称放在后面
方案二:通过order by decode
select * from br_dict torder by decode(mjd, '≤60㎡', 1,'60-90㎡', 2,'90-120㎡', 3,'120-144㎡', 4,'144-180㎡', 5,'180-220㎡', 6,'>220㎡', 7)
;result:
系列一 ≤60㎡ 2.05
系列一 60-90㎡ 7.04
系列一 90-120㎡ 36.92
系列一 120-144㎡ 39.82
二 144-180㎡ 9.41
系列一 144-180㎡ 9.41
一 180-220㎡ 2.6
系列一 180-220㎡ 2.6
系列一 >220㎡ 2.15
列一 >220㎡ 2.15
注意:用order by instr时字段名称放在前面
补充:通过拼音、比划、部首排序方法
准备测试数据
drop table order_tb;
CREATE TABLE order_tb(
py VARCHAR2(32) NOT NULL,
bh VARCHAR2(32),
bs VARCHAR2(32)
);insert into order_tb(py, bh, bs) values
('as', '一', '仁');
insert into order_tb(py, bh, bs) values
('ab', '二', '们');
insert into order_tb(py, bh, bs) values
('ab', '二', '们');
insert into order_tb(py, bh, bs) values
('rw', '三', '情');
insert into order_tb(py, bh, bs) values
('rw', '思', '思');
insert into order_tb(py, bh, bs) values
('bd', '四', '情');
insert into order_tb(py, bh, bs) values
('cd', '五', '据');
insert into order_tb(py, bh, bs) values
('c', '六', '次');
使用拼音排序
默认生序,可以添加desc关键字设置为降序排序
select * from order_tb torder by nlssort(py,'NLS_SORT=SCHINESE_PINYIN_M') --desc
;result:
ab 二 们
ab 二 们
as 一 仁
as 一 仁
bc 三 怡
bc 三 怡
bd 四 情
bd 四 情
c 六 次
c 六 次
cd 五 据
cd 五 据
rw 思 思
rw 三 情
使用部首排序
默认生序,可以添加desc关键字设置为降序排序
select * from order_tb torder by nlssort(bs,'NLS_SORT=SCHINESE_RADICAL_M') --desc
;result:
as 一 仁
as 一 仁
ab 二 们
ab 二 们
bc 三 怡
bc 三 怡
rw 思 思
rw 三 情
bd 四 情
bd 四 情
cd 五 据
cd 五 据
c 六 次
c 六 次
使用笔画数排序
默认生序,可以添加desc关键字设置为降序排序
select * from order_tb torder by nlssort(bh,'NLS_SORT=SCHINESE_STROKE_M') --desc
;result:
as 一 仁
as 一 仁
ab 二 们
ab 二 们
bc 三 怡
bc 三 怡
rw 三 情
cd 五 据
cd 五 据
c 六 次
c 六 次
bd 四 情
bd 四 情
rw 思 思
【oracle】oracle按照某字段指定顺序排序相关推荐
- SQL Server中使用自定义指定顺序排序
SQL Server中使用自定义指定顺序排序 原文:SQL Server中使用自定义指定顺序排序 比如需要对SQL表中的字段NAME进行如下的排序: 张三(Z) 李四(L) 王五(W) 赵六(Z) 如 ...
- DataFrame按某种指定顺序排序
DataFrame按某种指定顺序排序 创建待排序DataFrame并指定排序列表 对DataFrame排序 创建待排序DataFrame并指定排序列表 import pandas as pd impo ...
- DB2按照字段的指定顺序排序
我们经常会遇到这样一个问题,某个列的可能值为 1, 2, 3.现在需要按照 2, 1, 3 的顺序排序,该怎么办呢? MySql中可以: select * from my_table where co ...
- SQL学习之使用order by 依照指定顺序排序或自己定义顺序排序
我们通常须要依据客户需求对于查询出来的结果给客户提供自己定义的排序方式,那么我们通常sql须要实现方式都有哪些,參考很多其它资料总结例如以下(不完好的和错误望大家指出): 一.假设我们仅仅是对于在某个 ...
- SQL学习之使用order by 按照指定顺序排序或自定义顺序排序
我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): 一.如果我们只是对于在某个程序中的应用 ...
- order by 按照指定顺序排序或自定义顺序排序
我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): 一.如果我们只是对于在某个程序中的应用 ...
- 使用order by 按照指定顺序排序或自定义顺序排序
我们通常需要根据客户需求对于查询出来的结果给客户提供自定义的排序方式,那么我们通常sql需要实现方式都有哪些,参考更多资料总结如下(不完善的和错误望大家指出): 一.如果我们只是对于在某个程序中的应用 ...
- 关于Mytatis动态拼接in语句并且按照指定顺序排序的问题
mysql在select的时候,如果where后面是in结构,查询出来的结果不会按in里面的数据顺序进行返回,而是有默认的排序.通常用到in的时候,是在update做批量更新的时候,这种情况不需要查询 ...
- PostgreSQL 按指定顺序排序
因为PostgreSql没有order by field 所以按照指定的顺序排序就没有这么简单了,可以使用case when then进行排序 示例一 SELECT stage, pln_status ...
最新文章
- 【运筹学】线性规划数学模型 ( 三要素 | 一般形式 | 向量形式 | 矩阵形式 )
- 【.NET Core项目实战-统一认证平台】第四章 网关篇-数据库存储配置(2)
- 多线程:synchronized
- Java黑皮书课后题第6章:*6.38(生成随机字符)使用程序清单6-10 RandomCharacter中的方法,打印100个大写字母及100个一位数字,每行打印10个
- 【玩转cocos2d-x之三十四】绘图:CCDrawingPrimitives和CCDrawNode
- 人人都可以用Mac--安装和卸载应用软件
- 编辑器sublime text3和插件package control、Sidebar Enhancements插件安装
- Vue进阶(贰零陆):Vue 培训课件
- 数字信号第二章freqz函数作业
- python如何拼读英语单词怎么写_Python简单的拼写检查
- 未来已来!域乎“区块链+产业应用赋能精英论坛”成功举办
- 一个屌丝程序猿的人生(六十三)
- java计算机毕业设计学生用品采购系统源码+数据库+系统+lw文档+部署
- STM32实例-蜂鸣器实验
- 《计算机网络(谢希仁6版)》学习笔记(word导入)[待补全]
- 数字孪生开发平台 数字孪生开发成本 数字孪生开发平台cortona3d
- archlinux下网易云音乐netease-cloud-music部分问题
- 全极化SAR图像freeman分解
- 【OpenWRT】 Chaos Calmer 15.05 编译
- erp中的:ATP、CTP、APS的概念