sql-server - SqlHierarchyId.Parse 失败,因为输入字符串 '1.1.3' 不是 SqlHierarchyId 节点的有效字符串表示形式

标签 sql-server

我创建了一个VARCHAR我的 SQL Server 表之一中名为“SequentialOrder”的列。它保存应用程序的版本号,格式为“MajorVersion.MinorVersion.RevisionVersion”,例如“2.5.1”。我想检索此表的内容并按 AppVersion 编号降序对它们进行排序,以便最新版本位于顶部。

但是,当我执行 ORDER BY SequentialOrder ASC 时,结果按字符串排序而不是数字排序。所以 12.1.1 低于 5.1.1,这对于我想做的事情来说是错误的。关于如何解决这个问题有什么想法吗?

    SELECT     sectionorder
    FROM         section
    ORDER BY CASE 
       WHEN sectionorder<> '' THEN sectionorder
            ELSE CAST('/' + REPLACE(sectionorder, '.', '/') + '/' AS hierarchyid)
       END

-输出:
11.9.0
1.1
3.2
1.1.3
2.3.4
1.4.5
1.2.9
[空字符串]
[空字符串]

我需要这样的精确输出:
1.1
3.2
1.1.3
1.2.9
1.4.5
2.3.4
11.9.0
[空字符串]
[空字符串]

最佳答案

对于 SQL Server,PARSENAME功能。

SELECT     GCOI, SequentialOrder, SortTitle
FROM         Title
ORDER BY CAST( ISNULL( PARSENAME( SequentialOrder, 3 ), -1 ) AS int) DESC
    , CAST( ISNULL( PARSENAME( SequentialOrder, 2 ), -1 ) AS int) DESC
    , CAST( ISNULL( PARSENAME( SequentialOrder ,1 ), -1 ) AS int) DESC

已更新以反射(reflect)按最后要求排序的 null 顺序。 再次更新以反射(reflect)降序。

关于sql-server - SqlHierarchyId.Parse 失败,因为输入字符串 '1.1.3' 不是 SqlHierarchyId 节点的有效字符串表示形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39570592/

相关文章:

c# - 如何使用 C# 对 SQL Server 中的字母数字列进行排序?

sql-server - SQL Server Float 数据类型计算 vs decimal

sql - 为什么会出现外键约束错误

sql - 推荐一个很好的SQL Server临时表教程

java - 工厂方法 'dataSource' 在启动时抛出异常

sql - 将儒略日期转换为 YYYY-MM-DD

SQL 选择分组行的最高计数

sql - 从 SQL Server 获取随机数据但没有重复值

asp.net - 当 session 状态设置为 Sql Server 时,使用什么序列化程序?我可以更改它吗?

SQL 服务器 2008 : N small databases VS 1 database with N schemas