现有如下需求

此人很懒没有设置昵称 2012-12-06 09:28:08

上图中的Depart_Admin
该列中存储的值为字符串,如果多个用','or';'隔开
现我需要批量移'除掉'depart_admin列中值为manager或者depart_admin中包含manager的
即将manager,rs81修改为rs81.
...全文
187 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 18 楼 Java_Tomcat 的回复:
引用 17 楼 wwwwb 的回复:对, %,rs81,% 也无法用到索引 这个我知道
全模糊查询无法使用索引,我最开始是用REGEXP来处理的但是后面就发现他无法满足需求了
  • 打赏
  • 举报
回复
引用 17 楼 wwwwb 的回复:
对, %,rs81,% 也无法用到索引
这个我知道
wwwwb 2012-12-06
  • 打赏
  • 举报
回复
对, %,rs81,% 也无法用到索引
  • 打赏
  • 举报
回复
引用 15 楼 WWWWA 的回复:
比较低,函数无法用到索引
但是据我所知除了这种办法貌似就没有其他办法了吧?
WWWWA 2012-12-06
  • 打赏
  • 举报
回复
比较低,函数无法用到索引
  • 打赏
  • 举报
回复
引用 13 楼 mysdzlt2007 的回复:
如果你的目的是查询,你可以用rs81与,;组合取匹配,可以不用replace。 例如SQL code?1234567SELECT * FROM ( SELECT 'aaa,cc,dd' AS M UNION SELECT 'aaa,ccd,dd' AS M UNION SELECT 'aaa,cc;dd' AS M UNION SELECT 'aaa,cc' AS M ……
我的第一个目的是批量修改当然在修改完之后我需要考虑是否会影响到查询。 现在解决了 1、先用replace替换 2、后用
引用 12 楼 wwwwb 的回复:
select * from tt where instr(concat(',',Depart_admin,','),',rs81,')>0
这样就可以解决所有问题了,顺便 问一句12L如果用这种转换然后查找的方式性能如何 5W的数据大概需要花费多少时间?
mysdzlt2007 2012-12-06
  • 打赏
  • 举报
回复
如果你的目的是查询,你可以用rs81与,;组合取匹配,可以不用replace。 例如
SELECT * 
FROM ( 
SELECT 'aaa,cc,dd' AS M 
UNION SELECT 'aaa,ccd,dd' AS M 
UNION SELECT 'aaa,cc;dd' AS M 
UNION SELECT 'aaa,cc' AS M ) tmp 
WHERE M REGEXP '(^cc,)|(^cc;)|(,cc,)|(,cc;)|(;cc,)|(;cc;)|(,cc$)|(;cc$)'
wwwwb 2012-12-06
  • 打赏
  • 举报
回复
select * from tt where instr(concat(',',Depart_admin,','),',rs81,')>0
  • 打赏
  • 举报
回复
引用 8 楼 WWWWA 的回复:
引用 3 楼 Java_Tomcat 的回复:引用 1 楼 wwwwb 的回复:update tt set depart_admin=replace(depart_admin,'manager,','') 你这个我也想到了,但是有个问题:如果depart_admin列中存在'manager,rs81'按照这种方式替换了之后该列的值就是',rs81'这不是还的去掉',……
按照这种方式 我表中Depart_admin列中如果存储的值如果为',rs81,,rs810,rs811' 哪你告诉我,我要怎么样才能根据用户Id查询出部门管理员是rs81的部门?
mysdzlt2007 2012-12-06
  • 打赏
  • 举报
回复
如果你数据量比较大的话,效率肯定不会多高,但是一个replace实现不了你的要求
Rotel-刘志东 2012-12-06
  • 打赏
  • 举报
回复
多层替换的性能方面也是没哟问题的。
WWWWA 2012-12-06
  • 打赏
  • 举报
回复
引用 3 楼 Java_Tomcat 的回复:
引用 1 楼 wwwwb 的回复:update tt set depart_admin=replace(depart_admin,'manager,','') 你这个我也想到了,但是有个问题:如果depart_admin列中存在'manager,rs81'按照这种方式替换了之后该列的值就是',rs81'这不是还的去掉','?
举例说明
  • 打赏
  • 举报
回复
引用 5 楼 mysdzlt2007 的回复:
你可以把manager和,以及;的组合列出来,多层replace
多层替换性能如何?
Rotel-刘志东 2012-12-06
  • 打赏
  • 举报
回复
update tb set depart_admin=replace(depart_admin,'manger,','');
mysdzlt2007 2012-12-06
  • 打赏
  • 举报
回复
你可以把manager和,以及;的组合列出来,多层replace
  • 打赏
  • 举报
回复
引用 2 楼 lzd_83 的回复:
select replace(depart_admin,'','manager,rs81') from tb
貌似不满足需求
Rotel-刘志东 2012-12-06
  • 打赏
  • 举报
回复
select replace(depart_admin,'','manager,rs81') from tb
  • 打赏
  • 举报
回复
引用 1 楼 wwwwb 的回复:
update tt set depart_admin=replace(depart_admin,'manager,','')
你这个我也想到了,但是有个问题:如果depart_admin列中存在'manager,rs81'按照这种方式替换了之后该列的值就是',rs81'这不是还的去掉','?
wwwwb 2012-12-06
  • 打赏
  • 举报
回复
update tt set depart_admin=replace(depart_admin,'manager,','')

56,940

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧