sql-server - 如何在 T-SQL 中获取版本号(varchar)列的 MAX 值

标签 sql-server tsql sorting max varchar

我有一个这样定义的表:

Column:  Version     Message
Type:    varchar(20) varchar(100)
----------------------------------
Row 1:    2.2.6       Message 1
Row 2:    2.2.7       Message 2
Row 3:    2.2.12      Message 3
Row 4:    2.3.9       Message 4
Row 5:    2.3.15      Message 5

我想编写一个 T-Sql 查询,它将获取 MAX 版本号的消息,其中“版本”列代表软件版本号。即,2.2.12 大于 2.2.7,2.3.15 大于 2.3.9,等等。不幸的是,如果不使用 CHARINDEX 或一些复杂的其他类似拆分的逻辑,我想不出一种简单的方法来做到这一点.运行此查询:
SELECT MAX(Version) FROM my_table

会产生错误的结果:

2.3.9

当它真的应该是 2.3.15 时。任何不会变得太复杂的聪明想法?

最佳答案

一种解决方案是使用表值拆分函数将版本拆分为行,然后将它们组合回列,以便您可以执行以下操作:

Select TOP 1 Major, Minor, Build
From ( ...derived crosstab query )
Order By Major Desc, Minor Desc, Build Desc

实际上,另一种方法是使用 PARSENAME 函数,该函数旨在拆分对象名称:
Select TOP 1 Version
From Table
Order By Cast(Parsename( Z.Version , 3 ) As Int) Desc
    , Cast(Parsename( Z.Version , 2 ) As Int) Desc
    , Cast(Parsename( Z.Version , 1 ) As Int) Desc

关于sql-server - 如何在 T-SQL 中获取版本号(varchar)列的 MAX 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3057532/

相关文章:

sql - 由于 case 语句,同一 ID 的多个实例填充在不同的列中

sql-server - SSIS - 第二个脚本任务未在 Foreach 循环容器中执行

sql-server - 如何通过链接服务器确保插入完成

sql-server - SQL Server ORDER BY 日期和最后的空值

SQL Server : fix misspelled business names

mysql - 使用 collat​​e 将 varchar 列排序为数字列

java - 将 ArrayList<ArrayList<String>> 作为行字段排序

sql - 合并多列

sql - SQL Server 中 sp_who 状态的含义

arrays - 获取数组元素的顺序图