繁体   English   中英

在SQL Server中按architectureid排序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM