Oracle SQL 对版本号进行排序

2023-12-11

在 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 按版本“编号”排序,不同长度的字符串
如何使用 SQL Server 查询对“版本号”列进行排序
Sql Server 中的版本号排序
mysql 版本号排序
还有很多。


这是一种方法。先按前面的号码下单.然后按后面的数字.

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Oracle SQL 对版本号进行排序 的相关文章

随机推荐

  • Javascript自动更新页面?

    任何人都可以给我一个方向 我想知道如何像 Facebook 那样自动更新页面以获取新的状态更新 新的喜欢等 即 如果您在窗口中打开一个状态并且用户单击 喜欢 则 1 喜欢会自动出现 提前致谢 这些是使用 PUSH 模型 订阅 发布 完成的
  • 在 Eclipse 中运行 Java 程序,就像从命令行一样

    因此 我发现了一些与我类似的问题 但没有一个具体解决了我遇到的问题 我的程序将由命令行参数调用 例如 java Main inputFile txt inputFile2 txt 我正在 Eclipse 中编程并使用public void
  • UI 属性不包含某些键

    我有以下问题 我需要获取 UI 属性 UIManager getString OptionPane okButtonText 返回字符串 OK 并且它有效 但是 如果我迭代UIDefaults钥匙组 我从来没有拿到钥匙 OptionPane
  • 远程最小化机器 VBS 中的发送密钥

    我在 SAP 应用程序的对象中执行 Shift Enter 时遇到问题 这是我的代码 If Dialog SAP Logon 730 WinListView SysListView32 Exist 100 Then Dialog SAP L
  • 为什么我下载文件时有两个请求? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 我有一个提供文件的操作 public override FileContentResult Foo var someDataAsBytes return File someD
  • 使用 SDK 获取 Azure VM 的 IP

    我有一个已启动并在天蓝色中运行的虚拟机 我知道它的名称 但希望使用新的 C SDK 以编程方式检索其 IP 地址并避免使用 REST API 我怎样才能做到这一点 尝试这个 string subId deadbeef beef beef b
  • 在python中求一棵树的最大和

    我有一棵数字树 我希望能够找到数字之和 每个数字下面是左右两个孩子 在所有可能的路径中 我希望能够通过所有可能的路径找到最大的数字 这是一个例子 8 3 11 10 2 32 6 返回 8 11 32 51 我觉得这是一个递归问题 但我坚持
  • 快速卷积算法

    我需要对两个一维信号进行卷积 一个平均有 500 个点 这个是汉宁窗函数 另一个有 125000 个点 每次运行 我需要应用三倍的卷积运算 我已经有一个基于 scipy 文档运行的实现 如果您愿意 您可以在此处查看代码 前面是 Delphi
  • Pentaho数据集成Kettle转换中如何配置生产环境的数据库连接

    我设计了一个ktr文件进行转换 我需要配置生产环境的数据库连接详细信息 我怎样才能做到这一点 有什么建议么 我使用环境变量 KETTLE HOME KETTLE JNDI ROOT PATH PATH KETTLE HOME Kettle
  • Boost Signals2 自动连接管理和更改信号的互斥类型

    我正在尝试使用自动连接管理 and 更改信号的互斥类型对于模板函数 以下代码使用 gcc 4 3 4 可以正常编译和执行 http ideone com LLN6d include
  • Renci SSH.NET - 没有为 opmnctl 返回结果字符串

    我试图通过 VB NET 从命令获取结果 它返回空字符串 如下面的代码所示 Dim connInfo As New Renci SshNet PasswordConnectionInfo serverip user pass Dim ssh
  • IonRangeSlider 将标签分配给值

    我在用离子范围滑块我想为值分配标签 反之亦然 因此 用户可以通过以下选项选择距海滩的距离 on beach 100m 200m 300m more than 300m 但我需要post价值观像 0 100 200 300 999 My in
  • 通过一次导入 csv 将多个用户添加到多个组(后续查询)

    我一直在寻找一种使用多个用户名填充多个通讯组的方法 我碰到本网站上的脚本由成员 Frode F 编写 Import Csv C Scripts Import Bulk Users into bulk groups bulkgroups3 c
  • 如果没有明确设置一个巨大的常量值,是否可以期望被告知不要超时?

    我已将超时设置为一个愚蠢的高数字 有没有更好的方法告诉脚本不要超时 usr bin expect spawn telnet 10 10 10 10 set timeout 200000000 expect login send user r
  • iOS 15 中 UIButton 图像行为发生变化?

    我的代码很简单 我有一个 UIButton 的出口 button 我在代码中设置它的图像 let jack UIImage named jack png self button setImage jack for normal 问题是这并不
  • Cython C++ 包装器运算符() 重载错误

    与我之前的问题有关 使用 Cython 包装使用 OpenCV 类型作为参数的 C 类 现在我陷入了另一个错误 我的 OpenCV 类型 Matx33d 的 cython 包装代码如下所示 cdef extern from opencv2
  • Eclipse:运行时我们如何获取 main 参数

    在 Java 中 对于普通的 main 方法 public static void main String args code here String args用于从命令行获取一些参数 我可以通过以下方式从命令提示符运行此文件 javac
  • 为什么修改迭代变量不影响后续迭代?

    这是我遇到问题的 Python 代码 for i in range 0 10 if i 5 i 3 print i 我预计输出是 0 1 2 3 4 8 9 然而 翻译却吐槽道 0 1 2 3 4 8 6 7 8 9 我知道一个for循环在
  • 在 matlab 等高线图中选择特定水平

    我有这个plot我生成它是为了测试等值线图在 matlab 上的工作原理 我想弄清楚是否有一种方法可以只绘制其中一条线 但不一定是第一条线 Matlab 的解释是 如果你这样做 contour X Y Z 1 它会绘制其中一条线 但它始终是
  • Oracle SQL 对版本号进行排序

    在 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