4 回答
TA贡献1880条经验 获得超4个赞
MySQL 8.0+你可以原生使用REGEXP_REPLACE
。
REGEXP_REPLACE(expr,pat,repl [,pos [,occurrence [,match_type]]])
将字符串expr中与模式pat指定的正则表达式匹配的匹配项替换为替换字符串repl,并返回结果字符串。如果expr,pat或repl为NULL,则返回值为NULL。
和正则表达式支持:
以前,MySQL使用Henry Spencer正则表达式库来支持正则表达式运算符(REGEXP,RLIKE)。
正则表达式支持已使用国际Unicode组件(ICU)重新实现,它提供完整的Unicode支持并且是多字节安全的。REGEXP_LIKE()函数以REGEXP和RLIKE运算符的方式执行正则表达式匹配,这些运算符现在是该函数的同义词。此外,REGEXP_INSTR(),REGEXP_REPLACE()和REGEXP_SUBSTR()函数可用于查找匹配位置并分别执行子串替换和提取。
SELECT REGEXP_REPLACE('Stackoverflow','[A-Zf]','-',1,0,'c'); -- Output:-tackover-low
TA贡献1886条经验 获得超2个赞
TA贡献1852条经验 获得超7个赞
我的强力方法让这个工作只是:
转储表 -
mysqldump -u user -p database table > dump.sql
查找并替换几个模式 -
find /path/to/dump.sql -type f -exec sed -i 's/old_string/new_string/g' {} \;
显然,您可以在文件上执行其他perl regeular表达式。导入表格 -
mysqlimport -u user -p database table < dump.sql
如果要确保字符串不在数据集中的其他位置,请运行一些正则表达式以确保它们都出现在类似的环境中。在运行替换之前创建备份并不困难,以防您意外破坏丢失信息深度的内容。
添加回答
举报