sql - 如何按multipart X.Y[.Z] "version"数字对查询结果进行排序?

标签 sql sql-server sql-server-2008 tsql

我有这个数据:

nov_id
2.1.1 
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.1.2 
2.1.3 
2.1.4 
2.1.5 
2.1.6 
2.1.7 
2.1.8 
2.1.9 
2.2   
2.3   
2.4   
2.5   
2.6   

我需要订购我的结果,所以我的预期结果是这样的:

nov_id
2.1.1 
2.1.2 
2.1.3 
2.1.4 
2.1.5 
2.1.6 
2.1.7 
2.1.8 
2.1.9 
2.1.10
2.1.11
2.1.12
2.1.13
2.1.14
2.2   
2.3   
2.4   
2.5   
2.6   

这是我的尝试之一:

Select nov_id 
From dbo.NS_tbl_sc_novedad
Order by Convert(int,Left(Ltrim(Rtrim(replace(nov_id,'.','')))+'0000',4));

我试图粘贴一些零并按其排序,但显然我还没有明白。

最佳答案

对于您的特定数据,这将起作用:

order by left(mov_id, 3),
         len(mov_id),
         mov_id

想法是按长度排序,因为末尾的数字越小,长度越短——给定值的存储方式。

这可以修改为更通用,具体取决于您的数据的实际情况。

关于sql - 如何按multipart X.Y[.Z] "version"数字对查询结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28348013/

相关文章:

MySQL 从 AS 中删除

sql-server - SSRS 报告工具栏格式显得拉长

sql-server-2008 - 有什么方法可以调试 SQL Server 2008 查询吗?

mysql - sql更新和加入

mysql - 如何将主键、外键和备用键连接在一起?

sql-server - 如何在T-SQL中进行Fold?

sql - 使用数据定义语言删除列和所有依赖对象

sql-server - SQL Server 2008 SCOPE_IDENTITY() 问题

c# - 存储过程删除查询不起作用。但是当它自己在编辑器中运行而不调用它时它可以正常工作

mysql - SQL预备语句