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 ...
随机推荐
- netty系列之:使用netty搭建websocket服务器
目录 简介 netty中的websocket websocket的版本 FrameDecoder和FrameEncoder WebSocketServerHandshaker WebSocketFra ...
- Microfacet模型采样下的brdf
本文前言 在学习图形学(games101 from bilibili)的时候,也遇到了像这样的问题,Cook-Torrance模型无法实现粗糙度为0时,物体微表面呈现绝对镜面的效果(呈现出一面镜子), ...
- 51nod1836-战忽局的手段【期望dp,矩阵乘法】
正题 题目连接:http://www.51nod.com/Challenge/Problem.html#problemId=1836 题目大意 \(n\)个点\(m\)次随机选择一个点标记(可以重复) ...
- YbtOJ#526-折纸游戏【二分,hash】
正题 题目链接:https://www.ybtoj.com.cn/problem/526 题目大意 一个\(n\times m\)的网格上有字母,你每次可以沿平行坐标轴对折网格,要求对折的对应位置字母 ...
- 二、mybatis之数据输出
上一篇我们做了一个入门案例,是我们做mybatis的基本步骤,不熟悉的可以回顾一下https://www.cnblogs.com/jasmine-e/p/15330355.html,在这篇文章中只是简 ...
- Dapr + .NET Core实战(十一)单机Dapr集群负载均衡
如何单机部署Dapr集群 第十篇讲过了K8S集群下如何使用Dapr运行程序,但是很多人一直在问如何单机下进行Dapr的负载,这节课我们来聊聊如何单机进行Dapr的负载. 首先要说的是单机下,通过 da ...
- 写学习abcde的简单AI(C++实现)
#include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> u ...
- TypeError: module() takes at most 2 arguments (3 given)
1. 错误提示 2. 代码 class Parent: """定义父类""" def __init__(self): print(" ...
- 使用docker部署nginx并配置https
我只有一台服务器,但我想在这台服务器上运行多个项目,怎么办? 总不能靠加端口区分吧? 百度和Google是个好东西,于是我找到了答案,使用nginx. 通过nginx,我可以给我的一台服务器配置两个域 ...
- Java:动态代理小记
Java:动态代理小记 对 Java 中的 动态代理,做一个微不足道的小小小小记 概述 动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理.比如说加日志,加事务等.可以给这个类创建一个代理 ...