gpt4 book ai didi

sql - Oracle SQL 对版本号进行排序

转载 作者:行者123 更新时间:2023-12-01 10:36:48 31 4
gpt4 key购买 nike

在 Oracle 中,只需使用 ORDER BY不对版本号进行排序。
我的 Version_Number字段被声明为 VARCHAR我无法改变它。
例如:以下版本:

1.20  
1.9
1.18
1.13
1.5
1.11
2.0
1.8
1.3
1.2
1.1
1.0
1.10

应该排序为
2.0   
1.20
1.18
1.13
1.11
1.10
1.9
1.8
1.5
1.3
1.2
1.1
1.0

我研究了几篇文章,但似乎没有一个真正符合我的目的,或者答案是针对 SQL Server 等而不是 Oracle。我遇到了这个特定的 sql,它看起来似乎有效。
select version_number from mytable 
order by lpad(version_number, 4) desc;

以这种方式对版本进行排序:
1.20    
1.18
1.13
1.11
1.10
2.0
1.9
1.8
1.5
1.3
1.2
1.1
1.0

我相信这个 sql 语句适用于 SQL Server :
select version_number from mytable 
order by cast ('/' + replace(version_number , '.', '/') + '/' as hierarchyid) desc;

但是,这不适用于 Oracle。 Oracle 中是否有替代hierarchyid 的方法?
有没有人可以想出一个 SQL 来准确地对这些版本进行排序?

我已经看过下面提到的帖子(附上链接)。所以请不要告诉我这篇文章是重复的。
SQL sort by version "number", a string of varying length
How Can I Sort A 'Version Number' Column Generically Using a SQL Server Query
Version number sorting in Sql Server
mysql sorting of version numbers
还有很多。

最佳答案

这是一种方法。先按前面的数字排序 .然后通过 . 后面的数字

select version_number 
from mytable
order by substr(version_number, 1, instr(version_number,'.')-1) desc
,length(substr(version_number, instr(version_number,'.')+1)) desc
,substr(version_number, instr(version_number,'.')+1) desc

关于sql - Oracle SQL 对版本号进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34000375/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com