【发布时间】:2015-03-24 07:12:01
【问题描述】:
原答案:
我需要按指定的分隔符拆分字符串。我已经通过SQL Performance - T-SQL Queries - Split Strings 上的指南使用Numbers Table 实现了这一点。但是,一旦字符串被拆分,如何将其合并回列中?所以这种形式的分割字符串的结果:
**Item**
a
id
xyz
abcd
a
id
xyz
abcd
转换成这种形式:
C1 C2 C3 C4
a id xyz abc
a id xyz abc
等等?
根据 Goat 的回答更新:
/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;
【问题讨论】:
-
您想将字符串拆分为列,而不是行,对吧?
-
是的。我首先做的是链接上的指南。但是,它将所有拆分数据返回到一列,而不是多列。
标签: sql sql-server tsql merge sql-server-2012