当前位置: 首页 > 面试题库 >

Oracle SQL对版本号进行排序

钱星华
2023-03-14
问题内容

在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中,hierarchyid可以替代吗?


问题答案:

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

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


 类似资料:
  • 问题内容: 我有一个表,存储的版本如下 我的要求是我需要对它们进行排序,以便输出为 但是,如果通过简单的命令不能按预期工作 需要帮助 问题答案: 实施大脑解决方案

  • 问题内容: 我有一个带有单词列表的文本文件,我需要使用Java按字母顺序对其进行排序。单词位于单独的行上。 我将如何处理,将它们读入数组列表,然后进行排序? 问题答案: 这是一个简单的四步过程,其中Stackoverflow问题解决了四个步骤中的三个: 阅读每一行并将其转换为Java String 将每个Java字符串存储在一个数组中(不要认为您需要引用它。) 排序数组 写出数组中的每个Java字

  • 我有代码,我已经使用列表来存储数据。我想对它的数据进行排序,那么有没有办法对数据进行排序,或者我必须通过比较所有的数据手动进行排序?

  • 我试图排序列的. csv文件。这些是列的名称和顺序: 这是我想要的订单: 当前我的代码如下所示: 使用我当前的代码,我得到以下列顺序的结果: 所以我已经想出了我必须传递一个函数给排序函数来指定我希望它如何排序,但是我找不到一个函数来做这件事。 非常感谢您的任何意见!

  • +++ get:/ <<< success { "code":1, "msg":"恭喜您,API访问成功!", "data":{ "version":"1.0.0", "doc":"http://www.kancloud.cn/thinkcmf/cmf5api" } } +++

  • 我正在学习Python和一些基本的数据结构和算法。我实现了自己版本的合并排序,但我不明白为什么它会改变输入数组的顺序。它的行为就像我在mergesort()函数中将输入数组作为全局引用一样,但我没有这样做。从我实现代码的方式来看,我认为应该在函数的本地范围内对输入数组的副本进行排序,然后返回该副本的排序版本,保持输入数组不变。然而,事实并非如此。它正确地对数组排序;我只是被一个似乎是范围问题的问题