如何在文本字段中将字符串“&”替换为“ &&”

时间:2019-01-17 18:43:23

标签: sql-server sql-server-2000

这是针对SQL Server 2000的,我无法更改:(

我在搜索字符串时遇到一些问题

&

并替换为

&&

我定位到文本字段(未全文索引)

我尝试过

UPDATE documents
SET doc_xml = REPLACE(doc_xml, '&' , '&&')

但是这不起作用,因为我必须转义&char。我尝试过

ESCAPE '\'

最后,但没有运气。

示例目标内容如下:

<FOLDER_Name>Buy&amp;&amp;Go</FOLDER_Name>
<PRODUCT_Name>Buy &amp;&amp; Go</PRODUCT_Name>
<SKU_Name>Buy &amp; Go</SKU_Name>
<COMPANY_Name>AT&amp;T</COMPANY_Name>   

我只希望替换单个

 &amp; 

在最后两行中,我需要获得的结果是这一行:

<FOLDER_Name>Buy&amp;&amp;Go</FOLDER_Name>
<Product_Name>Buy &amp;&amp; Go</Product_Name>
<SKU_Name>Buy &amp;&amp; Go</SKU_Name>
<COMPANY_Name>AT&amp;&amp;T</COMPANY_Name>

我必须保留原始内容中的空格,也不要修改已经具有双“&”号的字符串

&amp;&amp;  

2 个答案:

答案 0 :(得分:2)

一种方法是将替换两次,而第二种修复四边形值。

declare @table table (x xml)
insert into @table
values( 
'<FOLDER_Name>Buy&amp;&amp;Go</FOLDER_Name>
<PRODUCT_Name>Buy &amp;&amp; Go</PRODUCT_Name>
<SKU_Name>Buy &amp; Go</SKU_Name>
<COMPANY_Name>AT&amp;T</COMPANY_Name>')

update @table
set x = convert(xml,
                replace(
                    replace(convert(varchar(max),x),'&amp;','&amp;&amp;'),'&amp;&amp;&amp;&amp;','&amp;&amp;'
                    )

                )

select * from @table

如果这不是xml列,则:

declare @table table (x varchar(max))
insert into @table
values( 
'<FOLDER_Name>Buy&amp;&amp;Go</FOLDER_Name>
<PRODUCT_Name>Buy &amp;&amp; Go</PRODUCT_Name>
<SKU_Name>Buy &amp; Go</SKU_Name>
<COMPANY_Name>AT&amp;T</COMPANY_Name>')

update @table
set x =     replace(
                replace(x,'&amp;','&amp;&amp;'),'&amp;&amp;&amp;&amp;','&amp;&amp;'
                )

select * from @table

因此您的代码将类似于:

UPDATE documents
SET doc_xml = 
    convert(xml,
                replace(
                    replace(convert(varchar(max),x),'&amp;','&amp;&amp;'),'&amp;&amp;&amp;&amp;','&amp;&amp;'
                    )

                )

答案 1 :(得分:1)

也许这可以在SQL2000上使用:

UPDATE documents
SET doc_xml =
REPLACE(
    REPLACE(
        REPLACE(CAST(doc_xml as varchar(8000))
            ,'&amp;&amp;', '&&'
                )
            ,'&amp;', '&amp;&amp;'
            )
            ,'&&', '&amp;&amp;'
        )

您可以尝试使用SSMS:

DECLARE @doc_xml varchar(4000)
SET @doc_xml =
'<FOLDER_Name>Buy&amp;&amp;Go</FOLDER_Name>
<PRODUCT_Name>Buy &amp;&amp; Go</PRODUCT_Name>
<SKU_Name>Buy &amp; Go</SKU_Name>
<COMPANY_Name>AT&amp;T</COMPANY_Name>'

PRINT
REPLACE(
    REPLACE(
        REPLACE(@doc_xml
            ,'&amp;&amp;', '&&'
                )
            ,'&amp;', '&amp;&amp;'
            )
            ,'&&', '&amp;&amp;'
        )