Ogr*_*m33 3 t-sql sql-server sorting varchar max
我有一个像这样定义的表:
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
Run Code Online (Sandbox Code Playgroud)
我想编写一个T-Sql查询,它将获取MAX版本号的消息,其中"Version"列表示软件版本号.即2.2.12大于2.2.7,2.3.15大于2.3.9等等.不幸的是,如果不使用CHARINDEX或其他复杂的其他类似分裂的逻辑,我想不出一个简单的方法. .运行此查询:
SELECT MAX(Version) FROM my_table
Run Code Online (Sandbox Code Playgroud)
会产生错误的结果:
2.3.9
什么时候真的应该是2.3.15.任何不太复杂的好主意?
Tho*_*mas 10
一种解决方案是使用表值拆分函数将版本拆分为行,然后将它们组合回列中,以便您可以执行以下操作:
Select TOP 1 Major, Minor, Build
From ( ...derived crosstab query )
Order By Major Desc, Minor Desc, Build Desc
Run Code Online (Sandbox Code Playgroud)
实际上,另一种方法是使用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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3756 次 |
| 最近记录: |