如何使用 SQL Server 查询对“版本号”列进行排序

2024-05-12

我想知道我们当中的 SQL 天才是否可以向我伸出援助之手。

我有一个专栏VersionNo在表中Versions包含“版本号”值,例如

VersionNo
---------
1.2.3.1
1.10.3.1
1.4.7.2

etc.

我正在寻找对此进行排序,但不幸的是,当我执行标准时order by,它被视为字符串,因此顺序为

VersionNo
---------
1.10.3.1
1.2.3.1
1.4.7.2

而不是以下,这就是我所追求的:

VersionNo
---------
1.2.3.1
1.4.7.2
1.10.3.1

所以,我需要做的是以相反的顺序按数字排序(例如,在 a.b.c.d 中,我需要按 d、c、b、a 排序以获得正确的排序)。

但我对如何以通用方式实现这一目标感到困惑。当然,我可以使用各种 sql 函数(例如left, right, substring, len, charindex),但我不能保证版本号总是由 4 部分组成。我可能有一个这样的清单:

VersionNo
---------
1.2.3.1
1.3
1.4.7.2
1.7.1
1.10.3.1
1.16.8.0.1

可以吗,有人有什么建议吗?我们将非常感谢您的帮助。


如果您使用的是 SQL Server 2008

select VersionNo from Versions order by cast('/' + replace(VersionNo , '.', '/') + '/' as hierarchyid);

什么是层次结构ID http://msdn.microsoft.com/en-us/library/bb677290.aspx

Edit:

2000年、2005年、2008年的解决方案:T-SQL 排序挑战的解决方案请参见此处 http://www.sqlmag.com/article/sql-server/solutions-to-t-sql-sorting-challenge.aspx.

挑战 http://www.sqlmag.com/article/sql-server/t-sql-sorting-challenge.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SQL Server 查询对“版本号”列进行排序 的相关文章

随机推荐