【问题标题】:SQL replacing part of a url stringSQL 替换部分 url 字符串
【发布时间】:2013-04-26 11:44:35
【问题描述】:

我想替换部分 url 中的字符。

我的网址

www.website.com/images/some-image-in-the-folder.jpg

例如,我会将所有“o”更改为“1"”之后出现

www.website.com/images/ (always the same)

结果会是。

www.website.com/images/s1me-image-in-the-f1lder.jpg

我的数据是这样的: Lorem ipsum dolor sit amet, consectetur adipiscing elit。 Maecenas nibh est, suscipit vel vestibulum in, bibendum eget erat。 sed 调味品 vulputate。 Ut malesuada massa eget libero lobortis sodales。 img src="www.website.com/images/some-image-in-the-folder.jpg" sed eleifend lobortis nisl 坐在 amet faucibus。 Morbi eu nunc eget sapien pellentesque convallis eget 在麦格纳。 Vivamus convallis sem 在 ante sodales vehicula。 Morbi tempus tortor non leo balloon scelerisque。

我该怎么做?

MySQL 5.0.95 阿帕奇/2.2.3 phpMyAdmin 3.5.7

非常感谢。 我是新手:/

【问题讨论】:

  • 你需要说明你使用的数据库平台,www.website.com/images/总是一样吗?
  • 在 MySQL 中,这可能就是您正在寻找的 dev.mysql.com/doc/refman/4.1/en/…
  • 你的数据库是哪个?

标签: mysql sql replace sql-like


【解决方案1】:

试试这个,mysql

SET @url := 'www.website.com/images/some-image-in-the-folder.jpg';
SET @notreplace := 'www.website.com/images/';

SELECT CONCAT(@notreplace , REPLACE(MID(@url,LENGTH(@notreplace)+1,
LENGTH(@url)-LENGTH(@notreplace)),'o','1') )

SQL

DECLARE @url VARCHAR(1000)
DECLARE @notreplace VARCHAR(1000)

SET @url = 'www.website.com/images/some-image-in-the-folder.jpg'
SET @notreplace = 'www.website.com/images/'

SELECT @notreplace + REPLACE(SUBSTRING(@url,LEN(@notreplace)+1,LEN(@url)-LEN(@notreplace)),'o','1') 

【讨论】:

    【解决方案2】:

    (此解决方案最动态,通过替换最后一个“/”之后的每个“o” - 无论 URL 是什么)

    问题是,仅使用REPLACE() 将替换所有出现的“o” - 因此您必须拆分字符串然后替换。让我们从拆分开始:

    SELECT SUBSTRING(
      'www.website.com/images/some-image-in-the-folder.jpg',
      1,
      CHAR_LENGTH('www.website.com/images/some-image-in-the-folder.jpg') - LOCATE('/', REVERSE('www.website.com/images/some-image-in-the-folder.jpg')) + 1
    );
    

    这给了www.website.com/images/

    接下来,抓取正确的内容并替换字符串:

    SELECT REPLACE(
      SUBSTRING_INDEX('www.website.com/images/some-image-in-the-folder.jpg', '/', -1),
      'o',
      '1'
    );
    

    这给出了`'s1me-image-in-the-f1lder.jpg'

    最后,合并两者:

    SELECT
      CONCAT(
        SUBSTRING(
          'www.website.com/images/some-image-in-the-folder.jpg',
           1,
           CHAR_LENGTH('www.website.com/images/some-image-in-the-folder.jpg') - LOCATE('/', REVERSE('www.website.com/images/some-image-in-the-folder.jpg')) + 1
        )
      ,
        REPLACE(
          SUBSTRING_INDEX('www.website.com/images/some-image-in-the-folder.jpg', '/', -1),
          'o',
          '1'
        )
      )
    ;
    

    瞧:www.website.com/images/s1me-image-in-the-f1lder.jpg :)

    值得注意的是,所有使用的函数都是二进制安全的。

    【讨论】:

      【解决方案3】:

      此解决方案将允许您根据数据库中的值进行搜索(您无需提供静态字符串):

      First:使用substring_index 获取之后 www.website.com/images/

      的字符串部分

      第二步:将第一步返回的o的所有实例替换为1

      第三:用最终结果更新表格

      UPDATE table 
      SET    yourcolumn = (SELECT Replace((SELECT 
                                         Substring_index((SELECT yourcolumn 
                                                   FROM   yourtable), 
                                                      'www.website.com/images/', 1 
                                                              )), 'o', '1')); 
      

      【讨论】:

        【解决方案4】:

        这个对我有用:

        update my_table set my_colum = replace(my_colum, "o", "1") 
        WHERE post_content REGEXP "http://www\.website\.com/images/.*[o]+.*";
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-17
          • 2020-03-04
          • 1970-01-01
          • 2013-06-19
          • 2021-03-25
          • 1970-01-01
          相关资源
          最近更新 更多