在 SQL 中使用 xml 标签拆分字符串
Posted
技术标签:
【中文标题】在 SQL 中使用 xml 标签拆分字符串【英文标题】:Splitting string using xml tags in SQL 【发布时间】:2014-05-09 03:43:51 【问题描述】:我想将split
和string
替换为sql
中的xml
标记。我有一个用户定义的函数如下:
CREATE FUNCTION [dbo].[stringtoxml]
(
@string_to_split NVARCHAR(MAX),
@delimiter NVARCHAR(100)
)
RETURNS XML
AS
BEGIN
DECLARE @xml XML
SET @xml = N'<t>' + REPLACE(@string_to_split, @delimiter,'</t><t>') + '</t>'
RETURN @xml
END
我将xml
存储在一个字段employee_name 中,其中datatype
是xml
。在另一个表中,我希望能够读取第一个元素作为名字,如果格式是一个字母字符后跟一个句号,第二个元素作为中间名,第三个元素作为姓氏。
@string_to_split
中有无效字符 - 例如“John O'Smith”。
有没有办法绕过无效字符而不必做:
DECLARE @xml XML
SET @xml = N'<t>' + REPLACE(REPLACE(REPLACE(@string_to_split,'''','''),'&','&'), @delimiter,'</t><t>') + '</t>'
RETURN @xml
然后在我读取另一个表中的单个元素时进行另一个替换以删除 &apos 和 &。
【问题讨论】:
这是TSQL
的SQL-Server
吗?请适当地标记问题。这会有所不同,因为不同的数据库引擎具有不同的字符串/XML 处理能力。
嗨,是的,这是 SQL-Server
【参考方案1】:
您可以使用for xml path
“XMLify”您的字符串。
查询:
declare @string_to_split nvarchar(max) = '&,<,>,'',"'
declare @delimiter nvarchar(100) = ','
declare @xml xml
set @xml = N'<t>' + replace((select @string_to_split for xml path('')), @delimiter, N'</t><t>') + N'</t>'
select @xml
结果:
<t>&</t>
<t><</t>
<t>></t>
<t>'</t>
<t>"</t>
【讨论】:
谢谢。我会试一试。然后我如何取消'XMLify' xml 元素,以便我可以将元素一个作为字符串存储在另一个表的employee_first 列中?以上是关于在 SQL 中使用 xml 标签拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章