我有一张包含约500k行的表格;其中一个名为filename
的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=...
",但看起来这似乎是一个最后的手段,并且效率低下且难看)