0

对不起,我的英语不好。我需要ifns_code从 ('before') 更改表中某些行中的部分字符串:

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>

到('之后'):

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 查询的了解并不好。

4

1 回答 1

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

于 2013-08-22T10:37:07.967 回答