T-SQL基于分隔符拆分列,并将拆分字符串数组输入到多个表列中
希望基于同一分隔符多次拆分列中的字符串,并将每个字符串数组输入到同一表中的单独表列中,例如T-SQL基于分隔符拆分列,并将拆分字符串数组输入到多个表列中,sql,sql-server,tsql,Sql,Sql Server,Tsql,希望基于同一分隔符多次拆分列中的字符串,并将每个字符串数组输入到同一表中的单独表列中,例如 DECLARE @Test VARCHAR(50) SET @Test = '0^5^6^104^0^0^5' 预期产量 试试这个 DECLARE @Test VARCHAR(50) SET @Test = '0^5^6^104^0^0^5' SET @Test = N'SELECT N''' + REPLACE(@Test,'^',''' ,''') + '''' exec(@Test) 请不要将值列
DECLARE @Test VARCHAR(50)
SET @Test = '0^5^6^104^0^0^5'
预期产量
试试这个
DECLARE @Test VARCHAR(50)
SET @Test = '0^5^6^104^0^0^5'
SET @Test = N'SELECT N''' + REPLACE(@Test,'^',''' ,''') + ''''
exec(@Test)
请不要将值列表存储为分隔字符串。这将导致巨大的性能问题。查找任意数量的示例,包括带有动态数据透视的拆分器。人们在不知道编写了什么或甚至没有测试代码的情况下,对其他用户的帖子发表负面评论。在作者回复后,被评论人删除了评论,但没有撤销否定点。这很痛。
DECLARE @Test table (val VARCHAR(50))
insert into @Test (val)values ('0^5^6^104^0^0^5')
;WITH CTE AS (
SELECT
Split.a.value('.', 'VARCHAR(100)') AS String
FROM (SELECT
CAST ('<M>' + REPLACE([val], '^', '</M><M>') + '</M>' AS XML) AS String
FROM @Test) AS A CROSS APPLY String.nodes ('/M') AS Split(a))
Select [1]Col1,[6]Col2,[7]Col3,[4]Col1,[2]Col1,[3]Col1,[5]Col1 from (
select T.RN,T.String from (
select Row_number()OVER( ORDER BY string )RN,string from CTE)T)K
PIVOT(MAX(string) FOR RN IN ([1],[2],[3],[4],[5],[6],[7]))P
DECLARE @Test VARCHAR(50)
SET @Test = '0^5^6^104^0^0^5'
SET @Test = N'SELECT N''' + REPLACE(@Test,'^',''' ,''') + ''''
exec(@Test)
DECLARE @Test VARCHAR(50)
SET @Test = '0^5^6^104^0^0^5'
select * from (
select t.col.value('.','varchar(max)') as val, 'column' + cast(ROW_NUMBER() over (order by (select 1)) as varchar(10)) as rn from
(
select cast('<m>' + REPLACE(@test,'^','</m><m>') + '</m>' as xml) as val
) as abc
cross apply abc.val.nodes('/m') as t(col)
) as t1
pivot (max(val) for rn in (column1,column2,column3,column4,column5,column6,column7)) as pvt