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

SQL Server中的版本号排序

关翰
2023-03-14
问题内容

我有一个表,存储的版本如下

Declare @tblVersion table(VersionNumber varchar(100))
 Insert into @tblVersion Values('1.3.1')
 Insert into @tblVersion Values('1.3.2.5')
 Insert into @tblVersion Values('1.4.1.7.12')
 Insert into @tblVersion Values('1.4.11.14.7')
 Insert into @tblVersion Values('1.4.3.109.1')
 Insert into @tblVersion Values('1.4.8.66')

 Select * From @tblVersion

VersionNumber
1.3.1
1.3.2.5
1.4.1.7.12
1.4.11.14.7
1.4.3.109.1
1.4.8.66

我的要求是我需要对它们进行排序,以便输出为

VersionNumber
1.3.1
1.3.2.5
1.4.1.7.12
1.4.3.109.1
1.4.8.66
1.4.11.14.7

但是,如果通过简单的命令不能按预期工作

Select VersionNumber
 From @tblVersion
 Order By VersionNumber

VersionNumber
1.3.1
1.3.2.5
1.4.1.7.12
1.4.11.14.7
1.4.3.109.1
1.4.8.66

需要帮助


问题答案:

实施大脑解决方案

Declare @tblVersion table(VersionNumber varchar(100)) 
 Insert into @tblVersion Values('1.3.1') 
 Insert into @tblVersion Values('1.3.2.5') 
 Insert into @tblVersion Values('1.4.1.7.12') 
 Insert into @tblVersion Values('1.4.11.14.7') 
 Insert into @tblVersion Values('1.4.3.109.1') 
 Insert into @tblVersion Values('1.4.8.66')

 --Select * From @tblVersion

 ;With CTE AS
 (
    Select 
        Rn = Row_Number() Over(Order By (Select 1))
        ,VersionNumber
    From @tblVersion
)
,CTESplit AS
(
    SELECT 
            F1.Rn,
            F1.VersionNumber,
            VersionSort = 
                            Case 
                                    When Len(O.VersionSort) = 1 Then '000' + O.VersionSort
                                    When Len(O.VersionSort) = 2 Then '00' + O.VersionSort
                                    When Len(O.VersionSort) = 3 Then '0' + O.VersionSort
                                    When Len(O.VersionSort) = 4 Then O.VersionSort
                            End

    FROM
    (
        SELECT *,
        cast('<X>'+replace(F.VersionNumber,'.','</X><X>')+'</X>' as XML) as xmlfilter from CTE F
    )F1
 CROSS APPLY
 ( 
    SELECT fdata.D.value('.','varchar(50)') as VersionSort  
    FROM f1.xmlfilter.nodes('X') as fdata(D)) O
 )
 ,CTE3 As(
Select 
        --Rn 
        --,
        VersionNumber
        ,SortableVersion = 
                            Stuff(
                                    (Select '.' + Cast(VersionSort As Varchar(100))
                             From CTESplit c2
                             Where c2.Rn = c1.Rn
                             For Xml Path('')),1,1,'')
From CTESplit c1
Group By c1.Rn,c1.VersionNumber
)
Select VersionNumber
From CTE3
Order By SortableVersion


 类似资料:
  • 以下的宏为configure脚本管理版本号。使用它们是可选的。 宏: AC_PREREQ version) 确保使用的是足够新的Autoconf版本。如果用于创建configure的Autoconf的版本比version 要早,就在标准错误输出打印一条错 误消息并不会创建configure。例如:AC—PREREQ(1.8) 如果你的'configure.in'依赖于在不同Autoconf版本中改

  • 问题内容: 在Oracle中,仅使用不会对版本号进行排序。我的字段被声明为a,并且无法更改。例如:以下版本: 应该排序为 我研究了几篇文章,但似乎都没有真正达到我的目的,或者答案是针对SQL Server等的,而不是针对Oracle的。我碰到了这个看起来很有效的特定sql。 以这种方式对版本进行排序: 我相信此sql语句适用于: 但是,这不适用于Oracle。在Oracle中,hierarchyi

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

  • 本文向大家介绍SqlServer高版本数据备份还原到低版本,包括了SqlServer高版本数据备份还原到低版本的使用技巧和注意事项,需要的朋友参考一下 最近遇见一个问题:   想要将Sqlserver高版本备份的数据还原到低版本SqlServer上去,但是这在SqlServer中是没法直接还原数据库的,所以经过一系列的请教总结出来一下可用方法。 首先、你得在电脑上装有你将要操作的高版本以及低版本的

  • 问题内容: 我想写一个样功能,比较两个版本号,并返回,或根据自己的比较valuses。 如果版本A早于版本B,则返回 返回如果版本A和B是等价的 如果版本A比版本B更新,则返回 每个小节都应解释为一个数字,因此1.10> 1.1。 所需的功能输出为 这是我的实现,有待改进: 我正在使用Python 2.4.5 btw。(安装在我的工作地点…)。 这是您可以使用的小型“测试套件” 问题答案: 删除字

  • 我正在使用MySQL5.5版本编写SQL查询来进行排序。我的问题是无法正确使用SQL查询下面的列排序。 这是我的数据库链接,显示我的排序错误https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=bcb32a6b47d0d5b061fd401d0888bdc3 实际上,我想对列模式进行排序,如下所示: 我的错误排序在MySQL5.5的结果,它不能正确排序在表。 错误