V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
python30
V2EX  ›  程序员

求一个 mysql 数据库替换图片的正规表达式

  •  
  •   python30 · 2023-06-04 11:07:08 +08:00 · 1528 次点击
    这是一个创建于 548 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据库文章 body 里有两种图片,一种是<img src="https://www.aaa.com/aa.jpg" />一种是 <img src="https://www.bbb.com/bb.jpg" /> 现在想用一种替换字符把 <img src="https://www.bbb.com/bb.jpg" />
    全部替换掉。就是替换为空。请问这样的 mysql 语句怎么写? 哪位朋友处理过?谢谢
    12 条回复    2023-06-04 21:44:41 +08:00
    totoro52
        1
    totoro52  
       2023-06-04 11:15:34 +08:00
    REGEXP_REPLACE 函数, 这个是 mysql8 的新函数,低于 8 就不行
    UPDATE 表名
    SET body = REGEXP_REPLACE(body, 'https://www\.aaa\.com', 'https://www.bbb.com')
    WHERE body LIKE '%https://www.aaa.com%';
    GPT 写的 SQL ,请自测,LIKE 也可以换为 REGEXP 函数
    如果低于 8 ,你还是写代码解决吧,批量读出来替换在批量去更新
    totoro52
        2
    totoro52  
       2023-06-04 11:16:52 +08:00
    GPT 写的这个正则应该是 hi 满足不来你这个需求,会把不是图片的也是替换,你改改加个标签上去即可。
    python30
        3
    python30  
    OP
       2023-06-04 11:30:57 +08:00
    @totoro52 mysql5.7 谢谢。这个改改可以用到 5.7 版本上吗?
    totoro52
        4
    totoro52  
       2023-06-04 12:46:22 +08:00
    @python30 最低支持 8 ,只有 8 有这个函数, 你 mysql5.7 肯定不行了,用代码去解决吧
    rockeyhan
        5
    rockeyhan  
       2023-06-04 12:46:40 +08:00
    update 'table_name' set 'field_nam' = replace ('field_name','from_str','to_str');

    几年前在 MySQL 5.* 上用过,可行。
    Leon406
        6
    Leon406  
       2023-06-04 12:52:03 +08:00
    可以参考下, 之前我就是这么做的

    UPDATE 表名
    SET body = replace (body, 'https://www.aaa.com', '')
    Where body REGEXP('<img src="https://www.aaa.com" />')
    totoro52
        7
    totoro52  
       2023-06-04 12:52:32 +08:00
    @rockeyhan 那样不是图片的也会被替换了, 不过可以<img src="https://www.aaa.com 改<img src="https://www.bbb.com 这样子 也不是不行 曲线救国
    rockeyhan
        8
    rockeyhan  
       2023-06-04 12:59:57 +08:00
    假设题主说的 body 是 table ,而 content 是 filed:

    update body set content = replace(content,'<img src="https://www.aaa.com" />','');

    我觉得应该可行。
    rockeyhan
        9
    rockeyhan  
       2023-06-04 13:02:11 +08:00
    哦哦,错了应该是:

    update body set content = replace(content,'<img src="https://www.bbb.com/bb.jpg" />','');
    python30
        10
    python30  
    OP
       2023-06-04 14:06:33 +08:00
    @rockeyhan
    @totoro52
    @Leon406

    忘了说明一个情况了
    就是图片有很多。而且
    都是 https://www.bbb.com/xxx/xxx/xxx.jpg 样式式的,其中的 xxx 可能是数字或字符或组合这样的。不是固定的字符串。
    totoro52
        11
    totoro52  
       2023-06-04 16:22:59 +08:00
    @python30 #10 那你没有 8 版本是解决不来这个问题了,replace 函数只是简单的解决替换
    你不想更新 8 就把文件导出来 SQL , 然后去 8 上面改完在导入回来, 不想这么麻烦就用代码批量拉下来改 批量更新上去,看你
    python30
        12
    python30  
    OP
       2023-06-04 21:44:41 +08:00
    @totoro52 hao de , xie xie.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1633 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:52 · PVG 00:52 · LAX 08:52 · JFK 11:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.