需求:有一列NAME, varchar2类型,内容如下

以上就是已经按order by name进行排序的,但不是我们想要的结果

现在需要只按数字进行排序

第一步:抽取数字
由于数字有是一位的有是两位的 所以不好用substr进行截取

我们可以使用REGEXP_SUBSTR函数,使用正则表达式从字符串中抽取子串。

  1. REGEXP_SUBSTR(name, '[0-9]+')

第二步、将varchar类型的数字转换为int类型的数字

  1. cast(yourcol as int)

可参考:sql中,把varchar类型转换为int型,然后进行排序

所以结合起来

  1. select * from test order by cast(REGEXP_SUBSTR(name, '[0-9]+') as int);

就可以按数字进行排序了

后来在开发的过程中又遇到类似问题,数据不一样了,按之前的用法是不适用的。

之前的是数字在前汉字在后,最主要的区别是数字没有重复的,而现在的数据中数字是有重复的

比如:

  1. 玫瑰园1楼
  2. 玫瑰园2楼
  3. 兴帝家园1楼
  4. 兴帝家园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排序

先按汉字进行排序,相同的再按数字排序

  1. SELECT * FROM ADDRESS_TREE
  2. order by REGEXP_SUBSTR(name, '[[:alpha:]]+'), --汉字排序
  3. cast(REGEXP_SUBSTR(name, '[0-9]+') as int); --数字排序
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

Oracle中对数字加汉字的排序的更多相关文章

  1. Oracle中对数字加汉字的排序(完好)

    之前写过一篇 Oracle中对数字加汉字的排序以及REGEXP_SUBSTR介绍 后来在开发的过程中又遇到相似问题.数据不一样了,按之前的使用方法是不适用的. 之前的是数字在前汉字在后,最基本的差别是 ...

  2. oracle 中日期的加减

    oracle 中日期的加减 加法   select sysdate,add_months(sysdate,12) from dual;        --加1年 select sysdate,add_ ...

  3. 关于oracle中的数字类型

    1.关于number类型. 以下是从其文档中摘录出的一句话: p is the precision, or the total number of significant decimal digits ...

  4. Oracle中的日期加减

    加法   select sysdate,add_months(sysdate,12) from dual;        --加1年 select sysdate,add_months(sysdate ...

  5. Oracle使用NLSSORT函数实现汉字的排序

    1).按拼音首字母排序 SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, 'NLS_SORT=SCHINESE_PINYIN_M'); 2).按笔画排序SELE ...

  6. (数组)对数组中的数字加1(plus one)

    题目:https://www.nowcoder.com/practice/4d135ddb2e8649ddb59ee7ac079aa882?tpId=46&tqId=29111&tPa ...

  7. Oracle中中文、数字,英文混杂形式的字段进行排序的方法

    http://blog.csdn.net/p451933505/article/details/9272257 对Oracle中中文.数字.英文混杂形式的字段进行排序的方法: 例如: order by ...

  8. Oracle字符串中包含数字、特殊符号的排序

    问题描述: 某小区,需要按照小区.楼栋.单元号.房间号进行排序,但是按照地址描述排序时,因为字符串中包含数字,所以造成了如下的结果, 1号楼之后应该是2号楼,但是查询结果却是10号楼 . 尝试解决 使 ...

  9. 关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其他位数)

    关于Oracle中查询的数字值的显示格式需要保留小数点后两位(或者三位,及其... 方法一:使用to_char的fm格式,即: to_char(round(data.amount,2),'FM9999 ...

随机推荐

  1. netty系列之:使用netty搭建websocket服务器

    目录 简介 netty中的websocket websocket的版本 FrameDecoder和FrameEncoder WebSocketServerHandshaker WebSocketFra ...

  2. Microfacet模型采样下的brdf

    本文前言 在学习图形学(games101 from bilibili)的时候,也遇到了像这样的问题,Cook-Torrance模型无法实现粗糙度为0时,物体微表面呈现绝对镜面的效果(呈现出一面镜子), ...

  3. 51nod1836-战忽局的手段【期望dp,矩阵乘法】

    正题 题目连接:http://www.51nod.com/Challenge/Problem.html#problemId=1836 题目大意 \(n\)个点\(m\)次随机选择一个点标记(可以重复) ...

  4. YbtOJ#526-折纸游戏【二分,hash】

    正题 题目链接:https://www.ybtoj.com.cn/problem/526 题目大意 一个\(n\times m\)的网格上有字母,你每次可以沿平行坐标轴对折网格,要求对折的对应位置字母 ...

  5. 二、mybatis之数据输出

    上一篇我们做了一个入门案例,是我们做mybatis的基本步骤,不熟悉的可以回顾一下https://www.cnblogs.com/jasmine-e/p/15330355.html,在这篇文章中只是简 ...

  6. Dapr + .NET Core实战(十一)单机Dapr集群负载均衡

    如何单机部署Dapr集群 第十篇讲过了K8S集群下如何使用Dapr运行程序,但是很多人一直在问如何单机下进行Dapr的负载,这节课我们来聊聊如何单机进行Dapr的负载. 首先要说的是单机下,通过 da ...

  7. 写学习abcde的简单AI(C++实现)

    #include <iostream> #include <time.h> #include <stdlib.h> #include <cmath> u ...

  8. TypeError: module() takes at most 2 arguments (3 given)

    1. 错误提示 2. 代码 class Parent: """定义父类""" def __init__(self): print(" ...

  9. 使用docker部署nginx并配置https

    我只有一台服务器,但我想在这台服务器上运行多个项目,怎么办? 总不能靠加端口区分吧? 百度和Google是个好东西,于是我找到了答案,使用nginx. 通过nginx,我可以给我的一台服务器配置两个域 ...

  10. Java:动态代理小记

    Java:动态代理小记 对 Java 中的 动态代理,做一个微不足道的小小小小记 概述 动态代理:当想要给实现了某个接口的类中的方法,加一些额外的处理.比如说加日志,加事务等.可以给这个类创建一个代理 ...