如何在文本字段中将字符串“&”替换为“&&”
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&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>
我只想更换单曲
&
在最后两行中,我需要获得的结果是:
<FOLDER_Name>Buy&&Go</FOLDER_Name>
<Product_Name>Buy && Go</Product_Name>
<SKU_Name>Buy && Go</SKU_Name>
<COMPANY_Name>AT&&T</COMPANY_Name>
我必须保留原始内容中的空格,也不要修改已经有双符号的字符串
&&
一种方法是替换两次,第二次修复四边形值。
declare @table table (x xml)
insert into @table
values(
'<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>')
update @table
set x = convert(xml,
replace(
replace(convert(varchar(max),x),'&','&&'),'&&&&','&&'
)
)
select * from @table
如果这不是 xml
列,则:
declare @table table (x varchar(max))
insert into @table
values(
'<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>')
update @table
set x = replace(
replace(x,'&','&&'),'&&&&','&&'
)
select * from @table
所以你的代码应该是这样的:
UPDATE documents
SET doc_xml =
convert(xml,
replace(
replace(convert(varchar(max),x),'&','&&'),'&&&&','&&'
)
)
也许这可以在 SQL2000 上运行:
UPDATE documents
SET doc_xml =
REPLACE(
REPLACE(
REPLACE(CAST(doc_xml as varchar(8000))
,'&&', '&&'
)
,'&', '&&'
)
,'&&', '&&'
)
你可以试试你的SSMS:
DECLARE @doc_xml varchar(4000)
SET @doc_xml =
'<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>'
PRINT
REPLACE(
REPLACE(
REPLACE(@doc_xml
,'&&', '&&'
)
,'&', '&&'
)
,'&&', '&&'
)
这是针对 SQL Server 2000 的,我无法更改 :(
我在搜索字符串
时遇到一些问题&
并将其替换为
&&
我的目标是文本字段(不是全文索引)
我试过
UPDATE documents
SET doc_xml = REPLACE(doc_xml, '&' , '&&')
但这不起作用,因为我必须转义 & 字符。我试过
ESCAPE '\'
在最后,但没有运气。
示例目标内容是这样的:
<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>
我只想更换单曲
&
在最后两行中,我需要获得的结果是:
<FOLDER_Name>Buy&&Go</FOLDER_Name>
<Product_Name>Buy && Go</Product_Name>
<SKU_Name>Buy && Go</SKU_Name>
<COMPANY_Name>AT&&T</COMPANY_Name>
我必须保留原始内容中的空格,也不要修改已经有双符号的字符串
&&
一种方法是替换两次,第二次修复四边形值。
declare @table table (x xml)
insert into @table
values(
'<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>')
update @table
set x = convert(xml,
replace(
replace(convert(varchar(max),x),'&','&&'),'&&&&','&&'
)
)
select * from @table
如果这不是 xml
列,则:
declare @table table (x varchar(max))
insert into @table
values(
'<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>')
update @table
set x = replace(
replace(x,'&','&&'),'&&&&','&&'
)
select * from @table
所以你的代码应该是这样的:
UPDATE documents
SET doc_xml =
convert(xml,
replace(
replace(convert(varchar(max),x),'&','&&'),'&&&&','&&'
)
)
也许这可以在 SQL2000 上运行:
UPDATE documents
SET doc_xml =
REPLACE(
REPLACE(
REPLACE(CAST(doc_xml as varchar(8000))
,'&&', '&&'
)
,'&', '&&'
)
,'&&', '&&'
)
你可以试试你的SSMS:
DECLARE @doc_xml varchar(4000)
SET @doc_xml =
'<FOLDER_Name>Buy&&Go</FOLDER_Name>
<PRODUCT_Name>Buy && Go</PRODUCT_Name>
<SKU_Name>Buy & Go</SKU_Name>
<COMPANY_Name>AT&T</COMPANY_Name>'
PRINT
REPLACE(
REPLACE(
REPLACE(@doc_xml
,'&&', '&&'
)
,'&', '&&'
)
,'&&', '&&'
)