如何使用SQL合并拆分数据

DNac

原始答案:
我需要按指定的分隔符分割字符串。我已经通过SQL性能指南-T-SQL查询-使用拆分字符串实现了这一点Numbers Table但是,一旦字符串被拆分,如何将其合并回列中?因此,以这种形式分割字符串的结果是:

**Item**
a
id
xyz
abcd
a
id
xyz
abcd

转换为以下形式:

C1 C2  C3   C4
a  id  xyz  abc
a  id  xyz  abc

等等?


根据山羊的答案进行更新

/abc/def/ghi/jkl.html_abc_def

应该分成

C1   C2   C3   C4   C5
abc  def  ghi  jkl  html_abc_def

这就是我到目前为止

WITH CTE AS (SELECT testString = 'abc/def/ghi/jkl.html_abc_def'
            ),
     splitString
     AS (SELECT *,
         CONVERT(XML, '<String><Section>'
                      + Replace(Replace((substring(teststring,1,patindex('%.html%',teststring)-1)),'_','/'), '/', '</Section><Section>')
                      + '</Section></String>') AS xmlString
         FROM   CTE)
SELECT xmlstring.value('/String[1]/Section[1]', 'varchar(100)') AS Col1,
       xmlstring.value('/String[1]/Section[2]', 'varchar(100)') AS Col2,
       xmlstring.value('/String[1]/Section[3]', 'varchar(100)') AS Col3,
       xmlstring.value('/String[1]/Section[4]', 'varchar(100)') AS Col4,
       xmlstring.value('/String[1]/Section[5]', 'varchar(100)') AS Col5,
       xmlstring.value('/String[1]/Section[6]', 'varchar(100)') AS Col6
FROM   splitstring;

--select substring(teststring,1,patindex('%.html%',teststring)-1) first
--substring(teststring,patindex('%.html%',teststring)+1,200) second

第一个子字符串将数据获取到.html,第二个子字符串将数据存储在其后。但是我不知道如何将它们放在一起。

知道了:

WITH CTE AS (SELECT testString = 'abc/def/ghi/jkl.html_abc_def'
            ),
     splitString
     AS (SELECT *,
         CONVERT(XML, '<String><Section>'
                      + Replace(Replace((substring(teststring,1,patindex('%.html%',teststring)-1)),'_','/'), '/', '</Section><Section>')
                      + '</Section></String>'
                      + '<String><Section>'
                      + substring(teststring,patindex('%.html%',teststring)+1,200)
                      + '</Section></String>'
                      ) AS xmlString
         FROM   CTE)
SELECT xmlstring.value('/String[1]/Section[1]', 'varchar(100)') AS Col1,
       xmlstring.value('/String[1]/Section[2]', 'varchar(100)') AS Col2,
       xmlstring.value('/String[1]/Section[3]', 'varchar(100)') AS Col3,
       xmlstring.value('/String[1]/Section[4]', 'varchar(100)') AS Col4,
       xmlstring.value('/String[2]/Section[1]', 'varchar(100)') AS Col5
FROM   splitstring;
哈特公司

您可以使用以下XML功能将定界的字符串拆分为单独的列,而不是先拆分为行

;WITH cte AS (SELECT testString = 'test,1,2,3'
              UNION  SELECT 'test,2,3,4'
              UNION  SELECT 'test,5,6,7')
     ,SplitString AS (SELECT *,
                             CONVERT(XML,'<String><Section>'+ REPLACE(testString,',', '</Section><Section>') + '</Section></String>') AS xmlString
                      FROM cte
                      )    
 SELECT xmlString.value('/String[1]/Section[1]','varchar(100)') AS Col1
       ,xmlString.value('/String[1]/Section[2]','varchar(100)') AS Col2
       ,xmlString.value('/String[1]/Section[3]','varchar(100)') AS Col3
       ,xmlString.value('/String[1]/Section[4]','varchar(100)') AS Col4
 FROM SplitString 

注意:以上使用逗号作为定界符,请相应地进行更改REPLACE()

更新:很高兴您能对它进行排序,但是看起来您可能使XML创建过于复杂了,我认为您可以替换./然后/在第二个中使用REPLACE()

;WITH cte AS (SELECT testString = 'abc/def/ghi/jkl.html_abc_def')
     ,SplitString AS (SELECT *,
                             CONVERT(XML,'<String><Section>'+ REPLACE(REPLACE(testString,'.','/'),'/', '</Section><Section>') + '</Section></String>') AS xmlString
                      FROM cte
                      )    
 SELECT xmlString.value('/String[1]/Section[1]','varchar(100)') AS Col1
       ,xmlString.value('/String[1]/Section[2]','varchar(100)') AS Col2
       ,xmlString.value('/String[1]/Section[3]','varchar(100)') AS Col3
       ,xmlString.value('/String[1]/Section[4]','varchar(100)') AS Col4
       ,xmlString.value('/String[1]/Section[5]','varchar(100)') AS Col5
 FROM SplitString 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在SQL中拆分数据

来自分类Dev

如何使用 Python 拆分数据?

来自分类Dev

SQL条件拆分数据

来自分类Dev

如何从时间拆分数据?

来自分类Dev

如何在使用Soap时在android中拆分数据

来自分类Dev

如何每月合并汇总并在特定日期拆分数据集

来自分类Dev

使用groupby拆分数据帧并将子集合并为列

来自分类Dev

SQL分组按拆分数据

来自分类Dev

如何按组拆分数据?

来自分类Dev

如何拆分数组中的数据

来自分类Dev

如何在AngularJS中拆分数据?

来自分类Dev

使用JQuery从帖子中拆分数据

来自分类Dev

RoR,Ruby 如何从数据库中拆分数据并使用计数

来自分类Dev

如何使用jQuery拆分数组的值

来自分类Dev

串口拆分数据

来自分类Dev

使用R,如何拆分数据框的列,然后分成多行?

来自分类Dev

在不拆分数据的情况下,如何使用R中的函数创建新的分类变量

来自分类Dev

如何使用单个单元格的拆分数组进行数据验证下拉菜单?

来自分类Dev

如何使用某些列的某些子级别拆分数据帧并在 tidyverse 中应用模型

来自分类Dev

如何在pyspark中使用pandas_udf拆分数据帧中的字符串

来自分类Dev

Python如何拆分数据包以提取数据

来自分类Dev

在SQL Server字符串中拆分数据

来自分类Dev

拆分数据时Spark-Sql出现问题

来自分类Dev

SQL 中的分隔函数以在分号之间拆分数据

来自分类Dev

使用SQL连接时如何合并/合并数据?

来自分类Dev

如何在R中每月拆分数据

来自分类Dev

如何按R中的特定行拆分数据帧

来自分类Dev

如何拆分数据框列并相应地复制行?

来自分类Dev

如何从视图中拆分数据库中的值?