T-SQL基于分隔符拆分列并将拆分后的字符串数组输入到多个表列中

Posted

技术标签:

【中文标题】T-SQL基于分隔符拆分列并将拆分后的字符串数组输入到多个表列中【英文标题】:T-SQL split column based on delimiter and input the split string array into multiple table columns 【发布时间】:2015-06-23 10:43:04 【问题描述】:

希望根据相同的分隔符多次拆分列中的字符串,并将每个字符串数组输入到同一表中的单独表列中,例如

DECLARE @Test VARCHAR(50)
SET @Test = '0^5^6^104^0^0^5'

预期输出

column1 column2 column3 column4 column5 column6 column7
0 5 6 104 0 0 5

【问题讨论】:

请不要将值列表存储为分隔字符串。这将导致巨大的性能问题。查找涉及具有动态枢轴的拆分器的任何数字示例 【参考方案1】:
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

【讨论】:

【参考方案2】:
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

【讨论】:

【参考方案3】:

试试这个

声明 @Test VARCHAR(50) SET @Test = '0^5^6^104^0^0^5' SET @Test = N'SELECT N''' + REPLACE(@Test,'^',''' ,''') + '''' 执行(@Test)

【讨论】:

人们在不知道写了什么甚至没有测试代码的情况下向其他用户发布负面的 cmets。有一次,作者回复后,被评论的人删除了评论,没有撤销负面观点。这很痛。

以上是关于T-SQL基于分隔符拆分列并将拆分后的字符串数组输入到多个表列中的主要内容,如果未能解决你的问题,请参考以下文章

拆分用逗号分隔的字符串并将值存储到 int 数组中

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数(此处为1则拆分一次,列表长度为2

Pandas使用str属性获取数据列的字符串方法类split函数基于指定分隔符拆分数据列的内容为列表设置参数n控制拆分的次数设置expand参数将拆分结果列表内容转化为多列dataframe

如何在 Ruby 中拆分分隔字符串并将其转换为数组?

Pandas使用split函数基于指定分隔符拆分数据列的内容为列表设置expand参数将拆分结果列表内容转化为多列数据并添加到原数据中replace函数基于正则表达式替换字符串数据列中的匹配内容

如何基于多个空格字符将文本文件拆分为 2 列作为 scala spark 的分隔符