[英]Sort by hierarchyid in SQL Server
我在SQL Server 2008中的表上定义了architectureid列
我们说在第一行中,hierarchyid是'/ 1/7/1 /'
假设在第二行中,hierarchyid为'/ 1/10/1 /'
如果我sort by hierarchyid ASC
,那么我将看到第二行,然后是第一行。 (排序将按字符串和'10'<'7'进行排序)
但是,出于兼容性原因,我希望先查看第一行,然后再查看第二行(即按int排序,且7 <10)
我已经解决了这个问题,方法是定义第二个architectureid列,然后将其设置为与第一个hierarchyid列相同,但是用点替换所有内部斜杠,然后以此进行排序。
我只是想知道是否有更优雅的方法。
您将需要隔离两个“ /”之间的内容,并按其顺序进行排序。 您可以使用此功能: http : //www.sqlusa.com/bestpractices2005/nthindex/
得到一个字符串的第n个索引,所以
declare @aux_str varchar(50)
set @aux_str='/1/7/3/'
select dbo.fnNthIndex(@aux_str,'/',2)
返回3。您必须找出第三个“ /”的位置并获取它们之间的含义。
这不难,但需要做很多工作
我知道这是一个相当老的问题,但这是Google的第一个结果,因此我想添加一个实际答案,以防其他人遇到此问题。 在没有看到使用SQL的情况下,很难做到100%,但是我怀疑OP将层次结构ID作为字符串返回并对其进行排序,而不是对层次结构ID本身进行排序:
例如..
declare @results table (Id int, Hierarchy hierarchyId)
-- :
-- Add your data here
-- :
-- This will not work as it's ordering a string
select Id, Hierarchy.ToString() as SortOrder from @results order by SortOrder
-- This will work as it's ordering the hierarchy id
select Id, Hierarchy.ToString() as SortOrder from @results order by Hierarchy
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.