mysql - 如何在 MySQL 中进行正则表达式替换?

我有一个大约 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=...",但这看起来像是最后的手段,缓慢而丑陋黑客)

最佳答案

MySQL 8.0+:

您可以使用 native REGEXP_REPLACE功能。

旧版本:

您可以使用用户定义的函数 (UDF),例如 mysql-udf-regexp .

https://stackoverflow.com/questions/986826/

相关文章:

mysql - 存储过程/函数列表 Mysql 命令行

mysql - 如何更改 MySQL 中列的数据类型?

mysql - 如何显示在 MySQL 上执行的最后一个查询?

mysql - 如何查看实时 MySQL 查询?

MySQL - 基于 SELECT Query 的 UPDATE 查询

mysql - 如何将整个 MySQL 数据库字符集和排序规则转换为 UTF-8?

mysql - mysql 中 int(11) 列的大小(以字节为单位)?

mysql - 在 MySQL 中使用 Join 删除

mysql - 安装 mysql2 时出错 : Failed to build gem native

mysql - 如何在 UPDATE 查询中执行三个表 JOIN?