假设我在 MySQL 中有以下逗号分隔的列值:foo,bar,baz,bar,foo2
将此字符串的第四个位置(在本例中为 bar
)替换为 barAAA
的最佳方法是什么? (这样我们就可以将 foo,bar,baz,bar,foo2
更改为 foo,bar,baz,barAAA,foo2
)?请注意bar
位置 2 和位置 4 均出现。
我知道我可以使用SUBSTRING_INDEX()
在 MySQL 中获取位置 4 中的值,但无法弄清楚如何用新值替换位置 4 中的值。
我需要在不创建 UDF 或存储函数的情况下通过仅使用 MySQL 中的标准字符串函数 ( http://dev.mysql.com/doc/refman/5.5/en/string-functions.html ) 来完成此操作。
最佳答案
嗯...也许是这个?
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
,我不确定,但这应该可行。
关于mysql - 替换 MySQL 中逗号分隔字符串中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8031929/