【问题标题】:str_replace in SQL UPDATE?SQL UPDATE中的str_replace?
【发布时间】:2010-10-15 16:04:57
【问题描述】:

这是一个示例表:

name       |   picture

John S.    |   http://servera.host.com/johns.png
Linda B.   |   http://servera.host.com/lindab.png
...

假设还有几百条记录。

假设我们将服务器从“servera”移动到“serverb”。

是否可以使用一个查询进入此表,以重命名“图片”列中的内容,以便每条记录读取正确的服务器名称?

【问题讨论】:

  • 是的,在几乎每个数据库引擎上,都可以使用单个 UPDATE 查询来执行此操作。但是,由于您没有指定特定的产品,因此您可能只会得到某人最喜欢的产品的答案。让我们知道您正在使用什么,有人会回复该产品的语法。
  • 哦,那是真的 - 谢谢拉里。我忘了提到我正在 MySQL 上开发
  • 这比直接回答您的问题更像是一个架构问题,但我建议不要将 url 的 FQDN 存储在您的数据库中。在您的应用程序代码中将其作为常量保留,然后当您绘制指向图片的链接时,src 将组合 PIC_HOST_DOMAIN_NAME.'/johns.png'。这样可以更轻松地移动图像,并将 CDN 用作图像前面的 CNAME。
  • 嗨大卫 - 我同意这是最简单和最好的方法。我们最近的应用程序仅支持这一理念,但我们的旧应用程序不支持。因此首先出现了问题。

标签: sql mysql string


【解决方案1】:

T-SQL:

update TBL 
   set picture = Replace(picture, 'servera', 'serverb') 
 where picture like '%servera%'

甲骨文:

update TBL 
   set picture = replace(picture, 'servera', 'serverb') 
 where picture like '%servera%'

MySQL:

update TBL 
   set picture = REPLACE(picture, 'servera', 'serverb') 
 where picture like '%servera%'

【讨论】:

    【解决方案2】:
    UPDATE users
    SET picture = REPLACE(picture, 'http://servera.host.com/', 'http://serverb.host.com/')
    WHERE picture LIKE 'http://servera.host.com/%';
    

    我包含更多字符串,因为我担心“修复”名为“somethingserverasomething.jpg”的图像。我可能还会考虑拥有一个 base_url 表并仅将图像文件名存储在用户中,但这不是你问的问题 ;-)

    【讨论】:

      猜你喜欢
      • 2019-04-01
      • 2023-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2019-05-18
      • 2020-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多