Oracle中对数字加汉字的排序
需求:有一列NAME, varchar2类型,内容如下
以上就是已经按order by name进行排序的,但不是我们想要的结果
现在需要只按数字进行排序
第一步:抽取数字
由于数字有是一位的有是两位的 所以不好用substr进行截取
我们可以使用REGEXP_SUBSTR函数,使用正则表达式从字符串中抽取子串。
- REGEXP_SUBSTR(name, '[0-9]+')
第二步、将varchar类型的数字转换为int类型的数字
- cast(yourcol as int)
可参考:sql中,把varchar类型转换为int型,然后进行排序
所以结合起来
- select * from test order by cast(REGEXP_SUBSTR(name, '[0-9]+') as int);
就可以按数字进行排序了
后来在开发的过程中又遇到类似问题,数据不一样了,按之前的用法是不适用的。
之前的是数字在前汉字在后,最主要的区别是数字没有重复的,而现在的数据中数字是有重复的
比如:
- 玫瑰园1楼
- 玫瑰园2楼
- 兴帝家园1楼
- 兴帝家园2楼
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
如果是只抽取数字进行排序 会造成两个1楼在前 两个2楼在后
而想要的结果是先按相同的名字排序 再按楼号排序
第一步:截取汉字
只截取正则表达式中汉字首次出现的位置(下同)
REGEXP_SUBSTR(name, '[[:alpha:]]+')
- 1
- 1
第二步:截取数字
REGEXP_SUBSTR(name, '[0-9]+')
- 1
- 1
第三步:ORDER BY排序
先按汉字进行排序,相同的再按数字排序
- SELECT * FROM ADDRESS_TREE
- order by REGEXP_SUBSTR(name, '[[:alpha:]]+'), --汉字排序
- cast(REGEXP_SUBSTR(name, '[0-9]+') as int); --数字排序
- 1
- 2
- 3
- 1
- 2
- 3
Oracle中对数字加汉字的排序的更多相关文章
- Oracle中对数字加汉字的排序(完好)
之前写过一篇 Oracle中对数字加汉字的排序以及REGEXP_SUBSTR介绍 后来在开发的过程中又遇到相似问题.数据不一样了,按之前的使用方法是不适用的. 之前的是数字在前汉字在后,最基本的差别是 ...
- oracle 中日期的加减
oracle 中日期的加减 加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_ ...
- 关于oracle中的数字类型
1.关于number类型. 以下是从其文档中摘录出的一句话: p is the precision, or the total number of significant decimal digits ...
- Oracle中的日期加减
加法 select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate,add_months(sysdate ...
- Oracle使用NLSSORT函数实现汉字的排序
1).按拼音首字母排序 SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_PINYIN_M'); 2).按笔画排序SELE ...
- (数组)对数组中的数字加1(plus one)
题目:https://www.nowcoder.com/practice/4d135ddb2e8649ddb59ee7ac079aa882?tpId=46&tqId=29111&tPa ...
- Oracle中中文、数字,英文混杂形式的字段进行排序的方法
http://blog.csdn.net/p451933505/article/details/9272257 对Oracle中中文.数字.英文混杂形式的字段进行排序的方法: 例如: order by ...
- Oracle字符串中包含数字、特殊符号的排序
问题描述: 某小区,需要按照小区.楼栋.单元号.房间号进行排序,但是按照地址描述排序时,因为字符串中包含数字,所以造成了如下的结果, 1号楼之后应该是2号楼,但是查询结果却是10号楼 . 尝试解决 使 ...
- 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)
关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...
随机推荐
- Loj#2769-「ROI 2017 Day 1」前往大都会【最短路树,斜率优化】
正题 题目链接:https://loj.ac/p/2769 题目大意 给出\(n\)个点\(m\)条地铁线路,每条线路是一条路径. 求\(1\)到\(n\)的最短路且在最短路径的情况下相邻换乘点的距离 ...
- Java面向对象编程(二)
关键字 -- this 一.this关键字的使用: 1.this可以用来修饰.调用:属性.方法.构造器. 2.this修饰属性和方法: this理解为:当前对象 或 当前正在创建的对象. 2.1 在类 ...
- 讲师征集| .NET Conf China 2021正式启动
最近社区小伙伴们一直在为11月即将在武汉举办的 第三届.NET中国峰会而忙碌,社区活动官网设计和开发工作还在进行,我们在国庆节的前一天晚上向社区正式启动了活动的序幕,也就是我们确定好了举办地点.时间, ...
- 5 大场景深度探讨何为 Serverless 架构模式?
作者 | Hongqi 阿里云高级技术专家 究竟什么是 Serverless 架构? 什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架 ...
- SpringMVC 数据响应
页面跳转 返回字符串形式 直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转. @RequestMapping("/quick") public String ...
- NX Open显示符号(UF_DISP_display_temporary_point)
UF_DISP_display_temporary_point 使用方法: 1 Dim x As Double = 0, y As Double = 0, z As Double = 0 2 3 Di ...
- python中常用的导包的方法和常用的库
python中常用的导包的方法 导入包和包名的方法:1.import package.module 2.from package.module import * 例一: ...
- Java项目中常用的的五大设计原则
今天我们一起来聊聊关于设计原则相关的知识点. SOLID五大原则是什么 SRP 单一责任原则 单一责任原则,从名字上我们就能比较好的去理解它.这项原则主张一个对象只专注于单个方面的逻辑,强调了职责的专 ...
- WPF 排版基础
一.WPF 排版基础 WPF使用控制面板来进行排版,控制面板实际上是一种可以放入WPF界面元素的容器.当用户把界面元素放入控制面板后,WPF会自动把这些界面元素放在它认为合适的地方.WPF开发人员需要 ...
- airtext初始化(一)