如何在MySQL中进行正则表达式替换?
如何在MySQL中进行正则表达式替换?
我有一个包含约500k行的表格; 文件名
是一个varchar(255)UTF8类型的列,其中包含一个文件名;
我试图从文件名中剥离出各种奇怪的字符 - 我想使用字符类:[^a-zA-Z0-9()_ .\\-]
现在,MySQL是否有一个函数可以让您通过正则表达式进行替换?我正在寻找类似于REPLACE()函数的功能 - 下面是一个简化的例子:
SELECT REPLACE('stackowerflow', 'ower', 'over'); Output: "stackoverflow" /* does something like this exist? */ SELECT X_REG_REPLACE('Stackoverflow','/[A-Zf]/','-'); Output: "-tackover-low"
我知道关于REGEXP / RLIKE,但这些只检查是否有匹配项,而不是匹配项是什么。
(我可以从PHP脚本执行“SELECT pkey_id,filename FROM foo WHERE filename RLIKE \'[^a-zA-Z0-9()_ .\\-]\'
”,然后执行preg_replace
,然后“UPDATE foo ... WHERE pkey_id = ...
”,但这看起来像是最后一招慢而且丑陋的hack)
admin 更改状态以发布 2023年5月23日
如果你正在使用MariaDB或MySQL 8.0,它们有一个函数
REGEXP_REPLACE(col, regexp, replace)
请注意,您也可以使用正则表达式分组(我发现这非常有用):
SELECT REGEXP_REPLACE("stackoverflow", "(stack)(over)(flow)", '\\2 - \\1 - \\3')
返回
over - stack - flow