在 SQL 中使用 xml 标签拆分字符串

Posted

技术标签:

【中文标题】在 SQL 中使用 xml 标签拆分字符串【英文标题】:Splitting string using xml tags in SQL 【发布时间】:2014-05-09 03:43:51 【问题描述】:

我想将splitstring 替换为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 中,其中datatypexml。在另一个表中,我希望能够读取第一个元素作为名字,如果格式是一个字母字符后跟一个句号,第二个元素作为中间名,第三个元素作为姓氏。

@string_to_split 中有无效字符 - 例如“John O'Smith”。

有没有办法绕过无效字符而不必做:

DECLARE @xml XML
SET @xml = N'<t>' + REPLACE(REPLACE(REPLACE(@string_to_split,'''','&apos;'),'&','&amp;'), @delimiter,'</t><t>') + '</t>'
RETURN @xml

然后在我读取另一个表中的单个元素时进行另一个替换以删除 &apos 和 &amp。

【问题讨论】:

这是TSQLSQL-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>&amp;</t>
<t>&lt;</t>
<t>&gt;</t>
<t>'</t>
<t>"</t>

【讨论】:

谢谢。我会试一试。然后我如何取消'XMLify' xml 元素,以便我可以将元素一个作为字符串存储在另一个表的employee_first 列中?

以上是关于在 SQL 中使用 xml 标签拆分字符串的主要内容,如果未能解决你的问题,请参考以下文章

sql SQL:使用XML拆分字符串

按标签拆分字符串并使用jQuery保存到数组中?

如何从 XML 字符串中解析标签内容?

在 SQL 中拆分长字符串

Django 使用模板标签拆分文本字段

当内容在单引号中时,使用 PowerShell 将 SQL 文件/字符串拆分为批处理排除拆分