带有更新的mysql regexp_replace

时间:2018-05-12 18:15:40

标签: mysql regexp-replace

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

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

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

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

2 个答案:

答案 0 :(得分:0)

它看起来像REGEXP_REPLACE函数的错误。在MariaDB中,它按预期工作,请参阅dbfiddle

我会尝试在bugs.mysql.com中报告错误。已经报告了错误Bug #90803 regexp_replace accumulating resultBug #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'

对我来说很好。希望这会有所帮助。