Oracle SQL对版本号进行排序

阿尔萨斯

在Oracle中,仅使用ORDER BY不对版本号进行排序。我的Version_Number字段被声明为a,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中是否有替代architectureid的替代方法?


有谁能提出SQL来对这些版本进行准确排序?

我已经看过下面提到的帖子(链接)。因此,请不要告诉我这篇文章是重复的。
SQL按版本“数字”排序,长度可变。
如何使用SQL Server查询一般性地对“版本号”列进行
排序 SQL Server中的版本号排序
mysql对版本号
等进行排序

瓦姆西·普拉巴拉(Vamsi Prabhala)

这是做到这一点的一种方法。首先按前面.的数字排序,然后按后面的数字排序.

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章