在mysql中用通配符替换整个单词
在mysql中用通配符替换整个单词
我有一个有大约500k行的表;字符集为UTF8的filename
列包含文件名;
我试图从文件名中剔除各种奇怪的字符-我想使用一个字符类:[^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=...
”,但这看起来像最后的招数,缓慢且丑陋)
admin 更改状态以发布 2023年5月22日
如果您正在使用MariaDB或MySQL 8.0,它们都有一个函数
REGEXP_REPLACE(col, regexp, replace)
请注意,您也可以使用正则表达式分组(我发现这非常有用):
SELECT REGEXP_REPLACE("stackoverflow", "(stack)(over)(flow)", '\\2 - \\1 - \\3')
返回
over - stack - flow