我创建了一个名为' 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
[空字符串]
[空字符串]
答案 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
订单。
再次更新以反映降序。