mysql regexp_replace 有更新

mysql regexp_replace with update

我刚刚将 MySQL 升级到 8.0.11 以便能够使用 regexp_replace。它在 select 语句中工作正常,但是当我在更新中使用相同的语句时,我得到奇怪的结果。这是一个简化的示例:如果我有一个包含“567890”的字段,并且我将其更新为:

update test set field = regexp_replace(field, '[7]', 'z')

而不是“56z890”,字段值设置为“56”。

这一定是一个错误,但与此同时,是否有任何解决方法可以让它按预期工作?谢谢

它看起来像是 REGEXP_REPLACE function. In MariaDB it works as expected, see dbfiddle 的错误。

我会尝试在 bugs.mysql.com. Bug was already reported, Bug #90803 regexp_replace accumulating result and Bug #90870 REGEXP_REPLACE truncate UPDATE 中报告错误。

解决方法是:

UPDATE `test`
SET `field` = CAST(REGEXP_REPLACE(`field`, '[7]', 'z') AS CHAR);

dbfiddle

我正在使用 Apache 版本 (PHP) 5.6MySQL 版本 10.1.25-Maria DB 本地主机服务器。

我试过以下查询,

UPDATE `table_name` 
SET         
    column_name = REGEXP_REPLACE(column_name,regex_pattern_to_find,replaceable_text)
WHERE
    column_name RLIKE 'regex_pattern_to_find'

它对我来说很好用。希望这有帮助。