Sql 如何选择存储在varchar列中的最低版本(即x.x.x.x)?
我已经尝试了从t中选择min(version)这个明显的Sql 如何选择存储在varchar列中的最低版本(即x.x.x.x)?,sql,sql-server-2008,version,Sql,Sql Server 2008,Version,我已经尝试了从t中选择min(version)这个明显的select,但是这不起作用,因为引擎认为字符串“1.12.0.0”小于“1.2.0.0”,这显然不是版本号的情况 我知道我可以轻松地动态拆分4个数字(使用计算列或视图),然后我可以使用从myview顺序中按asc、b asc、c asc、d asc选择前1行 。。。但我很想知道是否有更简单的方法来实现这一点如果您的版本号最多包含4个由点分隔的数字,您可能会滥用此功能: select top 1 * from Versions or
select,但是这不起作用,因为引擎认为字符串“1.12.0.0”小于“1.2.0.0”,这显然不是版本号的情况
我知道我可以轻松地动态拆分4个数字(使用计算列或视图),然后我可以使用从myview顺序中按asc、b asc、c asc、d asc选择前1行
。。。但我很想知道是否有更简单的方法来实现这一点如果您的版本号最多包含4个由点分隔的数字,您可能会滥用此功能:
select top 1 *
from Versions
order by
cast(parsename(Version, 4) as int)
, cast(parsename(Version, 3) as int)
, cast(parsename(Version, 2) as int)
, cast(parsename(Version, 1) as int)
您能将次要版本存储为固定长度吗?另请参阅我猜可能的副本1.2.0.0版是否早于1.12.0.0版?@SirRufo:很好,版本号必须转换为int
进行排序。更新答案。