在SQL Server 2008数据库中,我有一列包含多个由分号分隔的值。一些值包含冒号。样本数据:SQL Server 2008 - 将多值列拆分为具有唯一值的行
key:value;key2:value;blah;foo;bar;A sample value:whee;others
key:value;blah;bar;others
A sample value:whee
我想从不同行的每一行的所有唯一值:
key:value
key2:value
blah
foo
bar
A sample value:whee
others
我已经看了各种split
功能,但他们似乎都对付硬编码的字符串,而不是来自表中列的字符串。我怎样才能做到这一点?
编辑: Thomas'answer got it!这是我最后的查询:
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)
我猜XmlValue.nodes
和Y.z.value
东西很神奇。 O_O
你可以使用C#,或者你有使用TSQL? –
我希望完全使用SQL Server Management Studio中的T-SQL来完成此操作。 –