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#2880-「JOISC 2014 Day3」稻草人【CDQ分治,单调栈,二分】
正题 题目链接:https://loj.ac/problem/2880 题目大意 给出平面上的\(n\)个点,然后求有多少个矩形满足 左下角和右上角各有一个点 矩形之间没有其他点 \(1\leq n\ ...
- CF708E-Student‘s Camp【数学期望,dp】
正题 题目链接:https://www.luogu.com.cn/problem/CF708E 题目大意 有\(n*m\)的矩形网格,然后每次每行最左边和最右边的格子各有\(p=\frac{c}{d} ...
- YbtOJ#853-平面标记【整体二分,凸壳】
正题 题目链接:http://www.ybtoj.com.cn/contest/119/problem/3 题目大意 给出\(n\)个点\((x_i,y_i)\),\(m\)次给出\((k_i,a_i ...
- MyBatis切换至MyBatis-plus踩坑Invalid bound statement (not found):
部分情况可以参考https://blog.csdn.net/wwrzyy/article/details/86034458 我的问题出现的根本原因就是没有扫描到mapper的xml文件 因为MyBat ...
- NER为什么那么难
命名实体识别(Name Entity Recognition) 是自然语言处理中一个比较基础的问题.要解决的问题是,从unstructure的文本当中找到实体并归类.当然我这么定义已经有了一定的bia ...
- List接口常用实现类对比
相同点 都实现了List接口 储存了有序 可重复的数据 不同点 ArrayList 线程不安全 但是效率高 底层使用 Object[] elementData 实现 LinkedList 底层使用双向 ...
- ArcToolbox工具箱
3D Analyst 工具 Data Interoperability Tools Geostatistical Analyst 工具 Network Analyst 工具 Schematics 工具 ...
- 题解 CF241E Flights
题目传送门 题目大意 给出一个 \(n\) 个点 \(m\) 条边的 \(\texttt{DAG}\) ,给每条边设定边权为 \(1\) 或者 \(2\) ,使得 \(1\to n\) 的每条路径长度 ...
- MS office设置夜间模式
点击文件 帐户 -> office主题
- Microsoft Porject Online 学习随手记一:环境创建和数据导入
没有想像的简单,也没那么复杂 Project OL之前是Dynamics 365 Enterprise P1中的一个模块,目前最新版本只能简单创建并且已经没有Enterprise P1选项. 主要流程 ...