抱歉我的英语不好。
我需要在('before')表中更改表ifns_code
中某些行的字符串部分:
name fio
3301 <a href="127.0.0.1/Users/Profile/lrm" title="LRM (1641)"><img src="../images/staff.ico">3301</img></a>
3302 <a href="127.0.0.1/Users/Profile/lrm" title="LRM (1641)"><img src="../images/staff.ico">3302</img></a>
3303 <a href="127.0.0.1/Users/Profile/uaa" title="uaa (1600)"><img src="../images/staff.ico">3303</img></a>
5007 <a href="127.0.0.1/Users/Profile/uaa" title="uaa (1600)"><img src="../images/staff.ico">5007</img></a>
5004 <a href="127.0.0.1/Users/Profile/meal" title="meal (1570)"><img src="../images/staff.ico">5004</img></a>
to('after'):
name fio
3301 <a href="127.0.0.1/Users/Profile/lrm" title="LRM (1641)"><img src="../images/staff.ico">3301</img></a>
3302 <a href="127.0.0.1/Users/Profile/lrm" title="LRM (1641)"><img src="../images/staff.ico">3302</img></a>
3303 <a href="127.0.0.1/Users/Profile/lrm" title="LRM (1641)"><img src="../images/staff.ico">3303</img></a>
5007 <a href="127.0.0.1/Users/Profile/lrm" title="LRM (1641)"><img src="../images/staff.ico">5007</img></a>
5004 <a href="127.0.0.1/Users/Profile/lrm" title="LRM (1641)"><img src="../images/staff.ico">5004</img></a>
换句话说: 我需要一个sql查询,它只更改所选记录中字符串的一部分:
where 'name' in ('3303','5007','5004')
变化:
<a href="https://127.0.0.1/Users/Profile/**!!!**" title="**!!!**">
为:
<a href="https://127.0.0.1/Users/Profile/lrm"" title="LRM (1641)">
没有接触到这部分字符串:
<img src="../images/staff.ico">**!!!**</img></a>
我正在尝试使用SUBSTRING_INDEX和CONCAT,但我对sql查询的了解并不好。
答案 0 :(得分:0)
尝试
UPDATE ifns_code INNER JOIN
( SELECT name n, REPLACE(fio,'**!!!**</img>','**???**</img>') f FROM ifns_code ) t ON n=name
SET ifns_code.fio=REPLACE(REPLACE(f,'**!!!**',code),'**???**',name)
这将执行两个替换操作,首先是三个字母代码(我的名字我不知道,我使用code
作为名称),然后是name
。如果您想让最后一个**!!!**
实例保持原样,只需将name
替换为外**!!!**
函数中的REPLACE
。
修改强>
现在,清楚地描述您想要的内容,我可以为您提供所需的UPDATE
声明:
UPDATE ifns_code INNER JOIN (
SELECT name n,instr(fio,'Profile/') i,instr(fio,'"><img') j FROM ifns_code
) tbl ON n=name
SET fio=CONCAT(substring(fio,1,i+7),
'lrm" title="LRM (1641)',
substring(fio,j))
WHERE name IN ('3303','5007','5004')
点击此处观看直播演示:http://sqlfiddle.com/#!8/3c1a4/1
在派生表表达式中,我计算了我想要改变的字符串部分之前的位置(i
)和之后的位置(j
)。剩下的只是substring
和concat
的组合。