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

How to replace the strings '&' for '&&' in a text field

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

我在搜索字符串

时遇到一些问题
&

并将其替换为

&&

我的目标是文本字段(不是全文索引)

我试过

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

但这不起作用,因为我必须转义 & 字符。我试过

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;  

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

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;'
                    )

                )

也许这可以在 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;'
        )