假设我在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)。
答案 0 :(得分:3)
您首先将问题分为两部分:
答案 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)