oracle - 如何让oracle sql结果按数字顺序排列

标签 oracle sql-order-by natural-sort

这就是我的 Oracle SQL 命令的样子:

select domain 
from table1 
order by 1 desc

这是返回数据的实际顺序:

us9.aaa.com
us8.aaa.com
us10.aaa.com 
us1.aaa.com

我的问题是,如何才能让返回的数据按照这样的顺序排列?

us10.aaa.com
us9.aaa.com
us8.aaa.com
us1.aaa.com

最佳答案

这是一种使用 regexp_replace() 的方法。它不关心您要排序的域名数字部分之前有多少个非数字字符(也不关心数字部分有多大):

SQL> with table1(domain) as (
     select 'us9.aaa.com' from dual
     union
     select 'us8.aaa.com' from dual
     union
     select 'us10.aaa.com' from dual
     union
     select 'us1.aaa.com' from dual
   )
   select domain
   from table1
   order by to_number(regexp_replace(domain, '^\D+(\d+)\..*', '\1')) desc;

DOMAIN
------------
us10.aaa.com
us9.aaa.com
us8.aaa.com
us1.aaa.com

SQL>

正则表达式可以解读为“在字符串开头查找一个或多个非数字字符,后跟一组记住的一个或多个数字,后跟文字句点,后跟任意数量的任意字符(直到隐含字符串结尾)”。 '\1' 表示返回第一个记住的组,即数字,该组将转换为 ORDER BY 所处理的数字。

关于oracle - 如何让oracle sql结果按数字顺序排列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33789109/

相关文章:

oracle - oracle多表导出

sql - 当表有重复工资时,使用子查询和密集排名的第 n 个最高工资不匹配

MYSQL如何根据店铺id混订商品

python - 如何按字母顺序对索引进行排序

c# - 对数据库更改执行 .NET 操作

Oracle 词汇,什么是 mysql/SQL Server 相当于数据库

mysql - 如何对多个查询的结果进行交替排序?

java - 什么是 "natural ordering"?

MySql 自然排序与某个值的偏移量

java - 在 CentOS 上安装 Java 1.6 Update 141