如何替换 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。
我有一个包含逗号分隔值的列,我想替换完全匹配的值而不是子字符串。
当前列值 = '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。