Bonjour
Je rencontre quelques difficultés dans la réalisation d'un script en SQL pour faire split d'une colonne en plusieurs autres colonnes.
J'ai une liste d'ID sous forme de string de type :
[codeT]
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT [codeT] FROM dbo.[LIST_CODE_TH]
01.03
01.03.01
01.03.01.17
20.01.01.01
20.01.01.01.02
20.01.01.01.03
20.01.01.01.04
300.900.01.01.28
300.900.01.01.29
...
Je cherche à split de cette manière
pour : 100.200.30.40.50
TH_CURRENT_PATH => 100.200.30.40.50
TH_PARENT_PATH => 100.200.30.40
TH_CURRENT_ID => 50
TH_PARENT_ID => 40
TH_MASTER_ID => 100
TH_MASTER_CHILD_ID => 200
J'ai donc produit cela :
avec PARSENAME j'arrive à atteindre les éléments jusqu'au 4ème niveau,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 SELECT [codeT] as TH_CURRENT_PATH ,PARSENAME([codeT], 1) as TH_CURRENT_ID ,PARSENAME([codeT], 2) as TH_PARENT_ID ,SUBSTRING([codeT],1,((LEN([codeT]))-(LEN(PARSENAME([codeT], 1)) + (IIF(SUBSTRING(SUBSTRING([codeT],1,((LEN([codeT]))-(LEN(PARSENAME([codeT], 1))))),((LEN(SUBSTRING([codeT],1,((LEN([codeT]))-(LEN(PARSENAME([codeT], 1))))))) ),(LEN(SUBSTRING([codeT],1,((LEN([codeT]))-(LEN(PARSENAME([codeT], 1)))))))) = '.', 1, 0))))) as TH_PARENT_PATH , REVERSE(PARSENAME(REVERSE([codeT]), 1)) as TH_MASTER_ID , REVERSE(PARSENAME(REVERSE([codeT]), 2)) AS TH_MASTER_CHILD_ID FROM dbo.[LIST_CODE_TH] ORDER BY [codeT] ASC;
mais je n'arrive pas à accéder aux valeurs si il y'a 5 niveau ou +
merci pour vos retours.
Partager