【发布时间】:2017-06-19 08:14:38
【问题描述】:
只是想寻求帮助。 我正在尝试使用分号作为分隔符来拆分分隔值。 逗号不能替换为分号,因为有些值有逗号。
ID Value
1 | A&B;C;D;E, F
转换为:
ID Value
1 A&B
1 C
1 D
1 E, F
我尝试调整我上网的 SQL 脚本,但没有成功
SELECT F1.ID,
O.splitdata
FROM
(
SELECT OldID,
cast('<X>'+replace((SELECT ColumnName + '' FOR XML PATH('')),';','</X><X>')+'</X>' as XML) as xmlfilter from TableName F
)F1
CROSS APPLY
(
SELECT fdata.D.value('.','varchar(max)') as splitdata
FROM f1.xmlfilter.nodes('X') as fdata(D)) O
它适用于我的某些列,但如果列有特殊或非法字符,它会输出此错误:
Msg 9411, Level 16, State 1, Line 2
XML parsing: line 1, character 16, semicolon expected
谢谢!
【问题讨论】:
-
有很多字符串拆分技术,您不必使用基于 XML 的函数。阅读 Aaron bertrand 的 Split strings the right way – or the next best way 并选择不同的功能。
-
像
sql split string on delimiter这样的快速谷歌提供了很多选择,包括上面链接的Zohar Peled 的优秀文章 - 你尝试过任何易于谷歌搜索的替代方法吗? -
如果您删除并且您的查询将正常工作@mirelle
-
@mohan111 我刚刚发布了一个答案,它允许在 XML-string-splitting 中使用此类字符。
-
链接的possible duplicate(由 Serg 提供)是一个很好的可能方法列表,但相当陈旧。那里的许多答案都已过时...我将用提示将其关闭为重复项,以便在那里寻找更新的答案...
标签: sql sql-server csv split