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

标签 mysql string substring

假设我在 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/

相关文章:

mysql - 为远程访问设置基于 unix 的 MySQL 数据库

c - 当输入字符串大小较大时字符串数组的存储

c - 为什么它重复源字符串的最后四个字符

algorithm - 最长公共(public)子串算法 O(n*m) 蛮力

javascript - 正则表达式提取子字符串,由于某种原因返回 2 个结果

sql - 对有条件的连接行进行计数时出现问题

PHP 为什么 !empty 不起作用?

java - 从字符串中删除最后一个数字

php - MySQL 查询适用于 mysqlworkbench 但不适用于 php 环境

python - 如何匹配字符串中的第一个单词?