Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何选择存储在varchar列中的最低版本(即x.x.x.x)?_Sql_Sql Server 2008_Version - Fatal编程技术网

Sql 如何选择存储在varchar列中的最低版本(即x.x.x.x)?

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

我已经尝试了从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
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
进行排序。更新答案。