如何替换 MySQL 中逗号分隔字符串中的完全匹配而不是子字符串?

How to replace the exact match and not the substring in comma separated strings in MySQL?

我有一个包含逗号分隔值的列,我想替换完全匹配的值而不是子字符串。

当前列值 = 'ab,aba,ab,abc'

UPDATE table SET col1 = INSERT(col1, LOCATE('ab', 'ab,aba,ab,abc'), CHAR_LENGTH('ab'), 'BA') WHERE FIND_IN_SET('ab', 'ab,aba,ab,abc');

我希望列值为 'BA, aba, BA, abc'。但它没有按预期工作。 我做错了什么?

在列的开头和结尾连接 ',' 并将所有 ',' 替换为 ',,' 后,所有 [=15= 的替换]s 可以通过搜索 ',ab,' 并将其替换为 ',BA,'.
来完成 最后删除前导和尾随 ',':

UPDATE tablename 
SET col = REPLACE(
            TRIM(',' FROM REPLACE(CONCAT(',', REPLACE(col, ',', ',,'), ','), ',ab,', ',BA,')), 
            ',,', 
            ','
          )
WHERE FIND_IN_SET('ab', col);

或者,如果您想将 'ab''BA' 作为参数传递:

UPDATE tablename 
SET col = REPLACE(
            TRIM(',' FROM REPLACE(CONCAT(',', REPLACE(col, ',', ',,'), ','), CONCAT(',', 'ab', ','), CONCAT(',', 'BA', ','))), 
            ',,', 
            ','
          )
WHERE FIND_IN_SET('ab', col);

?1 替换为您要替换的字符串 ('ab'),将 ?2 替换为替换字符串 ('BA')。

参见demo