我刚刚将MySQL升级到8.0.11以便能够使用regexp_replace。它在select语句中工作正常,但是当我在更新中使用相同时,我会得到奇怪的结果。这是一个简化的例子:如果我有一个" 567890"的字段,我用它更新了它:
update test set field = regexp_replace(field, '[7]', 'z')
而不是" 56z890",字段值设置为" 56"。
这必定是一个错误,但与此同时,是否有任何变通方法可以让它按预期工作?感谢。
答案 0 :(得分:0)
它看起来像REGEXP_REPLACE函数的错误。在MariaDB中,它按预期工作,请参阅dbfiddle。
我会尝试在bugs.mysql.com中报告错误。已经报告了错误Bug #90803 regexp_replace accumulating result和Bug #90870 REGEXP_REPLACE truncate UPDATE。
解决方法是:
UPDATE `test`
SET `field` = CAST(REGEXP_REPLACE(`field`, '[7]', 'z') AS CHAR);
请参阅dbfiddle。
答案 1 :(得分:0)
我正在使用 Apache Version(PHP)5.6 和 MySQL版本10.1.25-Maria DB Localhost Server。
我尝试了以下查询,
UPDATE `table_name`
SET
column_name = REGEXP_REPLACE(column_name,regex_pattern_to_find,replaceable_text)
WHERE
column_name RLIKE 'regex_pattern_to_find'
对我来说很好。希望这会有所帮助。