如何在MySQL中用REGEXP_REPLACE将多个字符替换为指定字符?
解决REGEXP_REPLACE替换特殊字符为下划线的需求
我来帮你搞定这个问题!你需要把字符串中的空格、减号、括号、点号这些特殊字符逐个替换为下划线,从给出的示例来看,每个特殊字符都要单独变成一个下划线(比如空格+减号+空格会转化成三个下划线)。
优化你的正则表达式写法
你当前的思路是对的,但可以用正则的字符类来简化语句,让表达式更清晰易读:
SELECT regexp_replace(name, '[ .\-()]', '_') FROM db.table;
这个写法的优势在于:
- 字符类
[]把所有需要匹配的特殊字符整合在一起,不用再用|分隔,代码更简洁 - 把减号
\-放在字符类里,避免被误解为范围符号(也可以把减号放在字符类的开头或结尾,这样不用转义,比如[ .()\-]) - 在字符类里,括号不需要额外转义,不过转义也不会影响结果
验证匹配效果
用你的示例数据测试的话,完全符合预期:
- 原字符串:
Pune Municipal Corp - Water→ 输出:Pune_Municipal_Corp___Water - 原字符串:
Kerala State Electricity Board Ltd. (KSEBL)→ 输出:Kerala_State_Electricity_Board_Ltd___KSEBL_ - 原字符串:
Paschim Gujarat Vij Company Limited (PGVCL)→ 输出:Paschim_Gujarat_Vij_Company_Limited__PGVCL_
如果你用的是某些特定的SQL方言(比如PostgreSQL),这个写法完全适用;如果是其他方言,只要支持标准正则字符类,都能正常工作。
内容的提问来源于stack exchange,提问作者Thivagar Moorthy
相关产品推荐
相关产品推荐

