需求:有一列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. 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙看这篇或许真的够了 | 百篇博客分析OpenHarmony源码 | v50.06

    百篇博客系列篇.本篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉坑指南 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙防掉 ...

  2. unittest基本原理及介绍

    unittest基本原理: unittest是python自带的测试框架,还有一个框架是:pytest,这里简单介绍下unittest模块的简单应用 unittest是python的标准测试库,相比于 ...

  3. Winform 空闲时间(鼠标键盘无操作)

    前言 Winform 在特定情况下,需要判断软件空闲时间(鼠标键盘无操作),然后在做一下一些操作. 实现 做了一个简单的例子,新建一个窗体,然后拖两个控件(Timer控件和label控件) using ...

  4. .NET 排序 Array.Sort<T> 实现分析

    System.Array.Sort<T> 是.NET内置的排序方法, 灵活且高效, 大家都学过一些排序算法,比如冒泡排序,插入排序,堆排序等,不过你知道这个方法背后使用了什么排序算法吗? ...

  5. Shiro 550反序列化漏洞分析

    Shiro 550反序列化漏洞分析 一.漏洞简介 影响版本:Apache Shiro < 1.2.4 特征判断:返回包中包含rememberMe=deleteMe字段. Apache Shiro ...

  6. java集合类之LinkedList

    概述 a, 我们知道LinkedList它的数据存储方式是双向链表,基于链表存储的特性, LinkedList具有查询较慢(顺序访问)但增加/删除较快(虽然要遍历到指定位置, 但是相对于数组存储来说不 ...

  7. 构建idea父工程

    构建idea父工程 首先通过idea新建一个Maven项目: 选择本地Maven版本: 工程名称: 选择字符编码:utf-8 file -> Settings -> Editor -> ...

  8. 简单几步零成本使用Vercel部署OneIndex 无需服务器搭建基于OneDrive的网盘

    前提 你需要一个OneDrive账号,必须管理员开放API 需要已安装Node.js 拥有Github账号,没有就注册一个 魔法上网环境(看情况) 注册应用 登录https://portal.azur ...

  9. docker中Jenkins启动无法安装插件,版本过低

    一.问题现象: 使用docker启动jenkins,在jenkins启动后却无法安装jenkins的插件,一直提示安装失败且从log看到提示信息显示为需要升级jenkins的版本 二.原因分析: 在使 ...

  10. Java(45)JDK新特性之String流

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201671.html 博客主页:https://www.cnblogs.com/testero ...