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

时间:2014-05-09 03:43:52

标签: sql-server xml

我希望通过split中的string标记替换空格来xml sql。我有一个用户定义的函数如下:

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

然后在我正在读取另一个表中的各个元素时,执行另一个替换以删除&amp;和&amp; amp。

1 个答案:

答案 0 :(得分:1)

您可以使用for xml path“XML化”字符串。

查询:

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>