2017-12-20 3 views
0

Angenommen, ich habe die folgenden HIERARCHYID Spalte in meiner SQL Server-Tabelle:SQL Server - Holen erste Knoten aus hierarchyid Feld

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/ 

Und ich mag eine Abfrage schreiben, die die folgenden INTTopNode Spalt zurückgibt - grundsätzlich Rückkehr der Top-Level-Wert der MyCol Spalte:

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 

ich bin ziemlich neu den hierarchyid Datentyp zu verwenden und ein Problem habe das correc finden t Funktion zwischen GetDescendant, GetLevel usw., um diese ganze Zahl zurückgeben zu können.

Wie kann ich dies auf die einfachste Weise erreichen?

+0

ist es eine einzelne Ziffer für den obersten Knoten immer? – scsimon

Antwort

2

Funktioniert das in Ihrem Fall?

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 

können Sie leiten dann den int durch Ersetzen von einem einfachen Gießen ->

TopLevel = CAST(REPLACE(X.GetAncestor(X.GetLevel()-1).ToString(),'/','') AS INT) 
+0

Ich habe für TopLevel einen Cast zu int hinzugefügt. –

+0

Entschuldigung, ich habe deine Antwort völlig falsch verstanden - Es ist perfekt !!! * DANKE * –

2

sollte diese Arbeit:

SELECT SUBSTRING(YourString, CHARINDEX('/', YourString) + 1, CHARINDEX('/', YourString,CHARINDEX('/', YourString)+1) - (CHARINDEX('/', YourString) + 1)) 
FROM YourTable; 
+0

Vielen Dank! - Ich hatte ** HOPING ** es gab eine Möglichkeit, direkt mit einem 'HIERARCHYID'-Feld umzugehen, aber das wird es definitiv tun !! –

Verwandte Themen