答案 0 :(得分:3)
但是,如果不使用Function
您可以使用XML
方法,则可以实现上述目标:
SELECT split.a.value('.', 'VARCHAR(MAX)') [TestCol]
FROM
(
SELECT CAST('<M>'+REPLACE([TestCol], '#', '</M><M>')+'</M>' AS XML) AS String
FROM [Table]
) A
CROSS APPLY String.nodes('/M') AS split(a);
答案 1 :(得分:2)
如果性能很重要,那么最快的T-SQL&#34;分离器&#34;对于varchar(8000)/ nvarchar(4000)将是DelimitedSplit8K_LEAD by Eirikur Eiriksson。链接到文章末尾的功能。
示例强>
-- sample data
declare @table table (someid int identity, somestring varchar(100));
insert @table (somestring) values ('abc#123##xxx'),('ff#rrr#ddd');
-- example
select someid, ItemNumber, Item
from @table t
cross apply dbo.DelimitedSplit8K_LEAD(t.somestring, '#');
<强>结果
someid ItemNumber Item
----------- ------------- -----
1 1 abc
1 2 123
1 3
1 4 xxx
2 1 ff
2 2 rrr
2 3 ddd