这就是我的 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/