【问题标题】:Splitting string using xml tags in SQL在 SQL 中使用 xml 标签拆分字符串
【发布时间】: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

标签: sql-server xml


【解决方案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 列中?
猜你喜欢
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 2015-12-27
相关资源
最近更新 更多