Dans une base de données SQL Server 2008, j'ai une colonne avec plusieurs valeurs séparées par des points-virgules. Certaines valeurs contiennent des deux-points. Données-échantillon:SQL Server 2008 - diviser la colonne à valeurs multiples en lignes avec des valeurs uniques
key:value;key2:value;blah;foo;bar;A sample value:whee;others
key:value;blah;bar;others
A sample value:whee
Je veux obtenir toutes les valeurs uniques de chaque ligne en rangées séparées:
key:value
key2:value
blah
foo
bar
A sample value:whee
others
J'ai regardé différentes split
fonctions, mais ils semblent tous faire face à Hard- chaînes codées, pas des chaînes provenant d'une colonne dans une table. Comment puis-je faire ceci?
Editer: La réponse de Thomas l'a eu! Voici était ma requête finale:
With SampleInputs As
(
select distinct myColumn from [myDatabase].[dbo].myTable where myColumn != ''
)
, XmlCte As
(
Select Cast('<z>' + Replace(myColumn, ';', '</z><z>') + '</z>' As xml) As XmlValue
From SampleInputs As I
)
Select Distinct Y.z.value('.','nvarchar(max)') As Value
From XmlCte
Cross Apply XmlValue.nodes('//z') Y(z)
Je devine que les choses XmlValue.nodes
et Y.z.value
est magique. O_o
Seriez-vous en mesure d'utiliser C#, ou avez-vous d'utiliser tsql? –
Je préférerais que cela se fasse entièrement dans T-SQL, dans SQL Server Management Studio. –