替换MySQL中逗号分隔的字符串中的值?

时间:2011-11-07 01:40:07

标签: mysql string substring

假设我在MySQL中有以下逗号分隔的列值:foo,bar,baz,bar,foo2

使用bar替换此字符串的第4个位置(在本例中为barAAA)的最佳方式是什么(以便我们将foo,bar,baz,bar,foo2更改为foo,bar,baz,barAAA,foo2 })?请注意,bar同时出现在第2位和第4位。

我知道我可以在MySQL中使用SUBSTRING_INDEX()来获取位置4中的任何值,但是无法弄清楚如何用新值替换位置4中的值。

我需要在不创建UDF或存储函数的情况下执行此操作,只使用MySQL中的标准字符串函数(http://dev.mysql.com/doc/refman/5.5/en/string-functions.html)。

3 个答案:

答案 0 :(得分:3)

您首先将问题分为两部分:

  1. 找到逗号并将字符串拆分为以逗号分隔的值。
  2. 使用相同的字符串更新表,并附加一些子字符串。
  3. 对于第一部分,我建议你看看here

    对于第二部分,你应该看看here

    还有一件事没有任何问题的捷径。你不应该逃避这个问题。把它作为挑战。在搜索答案时学习。最好的事情是从这里获得指导,并尝试做更多的研究和努力。

答案 1 :(得分:2)

嗯......也许这个?

SELECT @before := CONCAT(SUBSTRING_INDEX(`columnname`,',',3),','),
       @len := LENGTH(SUBSTRING_INDEX(`columnname`,',',4)+1
FROM `tablename` WHERE ...;

SELECT CONCAT(@before,'newstring',SUBSTRING(`columnname`,@len+1)) AS `result`
FROM `tablename` WHERE ...;

根据需要更换东西,但这应该就是这样做。

编辑:合并为一个查询:

SELECT
    CONCAT(
        SUBSTRING_INDEX(`columnname`,',',3),
        ',newstring,',
        SUBSTRING(`columnname`, LENGTH(SUBSTRING_INDEX(`columnname`,',',4)+1))
    ) as `result`
FROM `tablename` WHERE ...;

+1可能需要+2,我不确定,但这应该有用。

答案 2 :(得分:0)

试试这个:

   UPDATE yourtable
   SET
      categories =
       TRIM(BOTH ',' FROM
         REPLACE(
           REPLACE(CONCAT(',',REPLACE(col, ',', ',,'), ','),',2,', ''), ',,', ',')
       )
   WHERE
     FIND_IN_SET('2', categories)

取自The best way to remove value from SET field?