我有一个大约 500k 行的表; varchar(255) 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 ,但那些只检查 if 有匹配项,而不是 什么 匹配项。
(我可以执行“SELECT pkey_id,filename FROM foo WHERE filename RLIKE '[^a-zA-Z0-9()_ .\-]'
"从 PHP 脚本中,执行 preg_replace
,然后执行 "UPDATE foo ... WHERE pkey_id=...
",但这看起来像是最后的手段,缓慢而丑陋黑客)
最佳答案
您可以使用 native REGEXP_REPLACE
功能。
您可以使用用户定义的函数 (UDF),例如 mysql-udf-regexp .
https://stackoverflow.com/questions/986826/