假设我的SQL Server表中有以下HIERARCHYID
列:
MyCol
/1/1/
/2/1/
/3/1/1/
/3/1/2/
/3/2/1/1/
/3/2/1/2/
/4/1/
/4/2/
/5/1/
/6/1/
/7/1/
/8/1/
/8/2/
我想编写一个返回以下INT
TopNode
列的查询 -
基本上返回MyCol
列的顶级值:
MyCol TopNode
/1/1/ 1
/2/1/ 2
/3/1/1/ 3
/3/1/2/ 3
/3/2/1/1/ 3
/3/2/1/2/ 3
/4/1/ 4
/4/2/ 4
/5/1/ 5
/6/1/ 6
/7/1/ 7
/8/1/ 8
/8/2/ 8
我使用HierarchyId数据类型相当新,并且在GetDescendant
,GetLevel
之间找到正确的函数时遇到问题,以便能够返回此整数。
我怎样才能以最简单的方式实现这一目标?
答案 0 :(得分:2)
这应该有效:
SELECT SUBSTRING(YourString, CHARINDEX('/', YourString) + 1, CHARINDEX('/', YourString,CHARINDEX('/', YourString)+1) - (CHARINDEX('/', YourString) + 1))
FROM YourTable;
答案 1 :(得分:2)
这适用于您的情况吗?
DECLARE @T TABLE(X HIERARCHYID)
INSERT @T SELECT '/1/1/'
INSERT @T SELECT '/2/1/'
INSERT @T SELECT '/3/1/'
INSERT @T SELECT '/3/2/'
INSERT @T SELECT '/3/3/'
INSERT @T SELECT '/3/4/'
SELECT
X.GetAncestor(X.GetLevel()-1),
X.GetAncestor(X.GetLevel()-1).ToString()
FROM @T
然后,您可以通过从简单替换 - >
进行强制转换来派生intTopLevel = CAST(REPLACE(X.GetAncestor(X.GetLevel()-1).ToString(),'/','') AS INT)