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

时间:2016-09-19 10:12:49

标签: sql-server

我创建了一个名为' SequentialOrder'的VARCHAR列。在我的一个SQL Server表中。它保存应用程序的版本号,格式为' MajorVersion.MinorVersion.RevisionVersion',例如' 2.5.1&#39 ;.我想检索此表的内容,并按降序顺序按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

-output:
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
[空字符串]
[空字符串]

1 个答案:

答案 0 :(得分:4)

对于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

根据上一个要求更新以反映null订单。 再次更新以反映降序。