【问题标题】:How to replace the strings '&' for '&&' in a text field如何在文本字段中将字符串 '&' 替换为 '&&'
【发布时间】:2019-06-12 00:46:38
【问题描述】:

这是针对 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;  

【问题讨论】:

  • doc_xml 列的数据类型是什么?你想替换'&'只有那四个标签?
  • @Krishnraj Rana 数据类型是文本,我想替换所有标签。注意:我已经接受了 Xabi 的回答。感谢您的提问,我应该包含该信息。

标签: sql-server sql-server-2000


【解决方案1】:

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

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

                )

【讨论】:

  • 我接受你的回答,因为它给了我在查询中添加 CONVERT 的提示,这最后是我面临的主要问题,谢谢。
  • 很高兴我能帮助@jaumenuez
【解决方案2】:

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

【讨论】:

  • 编辑:哦,那是在 SSMS 上,但我收到一条消息“参数数据类型文本对于替换函数的参数 1 无效。”当试图在桌子上执行它时。该字段的数据类型是 TEXT。我找不到解决方法。
  • 已经修复了添加 convert (varchar(4000) .. 在适当的地方:UPDATE document SET doc_xml = convert(varchar(4000), replace( replace(convert(varchar(7000),doc_xml),'&amp;amp;','&amp;amp;&amp;amp;'),'&amp;amp;&amp;amp;&amp;amp;&amp;amp;','&amp;amp;&amp;amp;' ) )
  • doc_xml 第一次出现时使用单个CAST(doc_xml as varchar(8000)) 解决
猜你喜欢
  • 2018-04-04
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
相关资源
最近更新 更多