access 批量模糊替换 sql 问题(搜索好久未解决)

目的:将一access表内某字段内所有<font color="~~各种不同的值"> 都替换为<font>

试着采用通配符,sql见下:

UPDATE form SET content = '<font>' WHERE content like '<font*> ';

这一句可以执行,但是结果是只能替换字段开头,字段中间的匹配字符都无法替换,也就是说不是全文替换,而是字段头替换

请问,如何才能实现全文替换呢?
好像是我说得不够清楚 举个字段内容的例子吧:

<font face=""宋体"">看我现在的香水大合集!<br/>一直很喜欢ferragamo incanto系列的香水<br/></font>
<br><br><b><font color=""#7D9B04"">相关评论:</font></b>赞的啊,一套齐了
<br><br><b><font color=""#7D9B04"">相关评论:</font></b>我有套小的,5ML的~~哈哈~ "

数据库里几千行都是类似内容

要把其中<font color=* 任意字符 > 都换为 <font>

变成这样:

<font>看我现在的香水大合集!<br/>一直很喜欢ferragamo incanto系列的香水<br/></font>
<br><br><b><font>相关评论:</font></b>赞的啊,一套齐了
<br><br><b><font>相关评论:</font></b>我有套小的,5ML的~~哈哈~ "

楼下给我的sql都达不到上面的效果,反倒会把有用的内容替换掉

另外,给出正则的方案似乎很靠谱,但是那段代码怎么执行啊? 放到什么页面里? 指点一下,我不懂技术,谢谢各位~~~~
最新回答
不顾离别

2024-05-01 20:43:45

使用正则表达式替换,如果的数据库比较大,将IIS的连接超时设置长一点

<%
Dim Db,conn,Rs1,Rs2,Str1,Str2,I,Re
str1="\<font[^\>]*\>" '要替换的字符串,支持正则<font>
str2="<font>" '替换为的字符串
Db="db.mdb" '这是你的数据库地址
table="Article" '这是要替换的数据库的表名称
ziduan="Content" '这是要替换的数据库的表的字段名称
'以下无需改动
'创建正则对象
Set Re=new RegExp
Re.IgnoreCase =True
Re.Global=True
Set Conn=Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&server.mappath(Db)
Set Rs1 = Conn.OpenSchema(20)
Do While Not Rs1.Eof
Set Rs2=Server.Createobject("adodb.recordset")
Rs2.Open "select "& ziduan &" from "& table &"",conn,1,3
Do While Not Rs2.Eof
For I=0 to Rs2.fields.count-1 '遍历所有字段
Rs2(Rs2(i).name)=Myreplace(Rs2(i).value&"")
Next
Rs2.Movenext
Loop
Rs2.Close
Set Rs2=nothing
Rs1.MoveNext
Loop
Rs1.Close
Set Rs1=Nothing
Conn.close
Set Conn=Nothing
Set Re=Nothing
response.write "  <font color='#ff3300'><b>替换数据成功!</b></font>"
'自定义的替换函数
Function myreplace(byval Tstr)
If Tstr="" Or isnull(Tstr) Then
Exit Function
Else
Re.Pattern=Str1
myReplace =Re.Replace(Tstr,Str2)
End If
End Function
%>
和快乐签约

2024-05-01 01:31:49

--SQL正则替换函数
CREATE function dbo.regexReplace
(
@source ntext, --原字符串
@regexp varchar(1000), --正则表达式
@replace varchar(1000), --替换值
@globalReplace bit = 1, --是否是全局替换
@ignoreCase bit = 0 --是否忽略大小写
)
returnS varchar(1000) AS
begin
declare @hr integer
declare @objRegExp integer
declare @result varchar(5000)

exec @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'Global', @globalReplace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignoreCase
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OAMethod @objRegExp, 'Replace', @result OUTPUT, @source, @replace
IF @hr <> 0 begin
exec @hr = sp_OADestroy @objRegExp
return null
end
exec @hr = sp_OADestroy @objRegExp
IF @hr <> 0 begin
return null
end

return @result
end

使用举例:
Select id,dbo.regexReplace(字段,'<font([^>])*>','<font>',1,0) AS 别名 From 表
漫天飞雪的夏日

2024-05-01 11:33:01

改成
UPDATE form SET content = '<font>' WHERE content like '<font%'
试试。
凡是以<font开头的都替换为<font>
旧事酒浓

2024-05-01 08:09:16

应该就是前后都模糊匹配的问题,
UPDATE form SET content = '<font>' WHERE content like '*<font*> ';
这样应该就可以了,
呵呵,希望能有帮助,^_^
盛夏尉蓝

2024-05-01 18:12:57

MS-SQL里可以用replace(替换)、substring(截取字符)、charindex(查找字符)这几个函数来实现。
access就。。。没研究过
青春的约定

2024-05-01 13:07:11

UPDATE form SET content = '<font>' WHERE content like '%<font% ';
就这句话就行了。