求 mysql 正则替换的方法假如我有一个字段中的内容是 111-(444)-789替换后的结果是 ***-(***)-***如果是数字就替换为*其他不变的输出。我想用 mysql实现。

解决方案 »

  1.   

    首先MYSQL目前还不支持正则替换,只支持正则查找。但应该可以通过一些字符串函数来实现。建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。这样我可以在自己本机帮你做个实验。
      

  2.   

    select replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(@x,'0','*'),'1','*'),'2','*'),'3','*'),'4','*'),'5','*'),'6','*'),'7','*'),'8','*'),'9','*') as nx;mysql> set @x='111-(444)-789';
    Query OK, 0 rows affected (0.00 sec)mysql> select replace(replace(replace(replace(replace(replace(replace(replace(re
    place(replace(@x,'0','*'),'1','*'),'2','*'),'3','*'),'4','*'),'5','*'),'6','*'),
    '7','*'),'8','*'),'9','*') as nx;
    +---------------+
    | nx            |
    +---------------+
    | ***-(***)-*** |
    +---------------+
    1 row in set (0.00 sec)mysql>
      

  3.   

    replace不支持正则。这个我有点困惑
      

  4.   

    SQLSERVER,MYSQL目前都没有直接的正则替换函数,不过MYSQL有正则查找
    如果你的数据象你这样有规律的话,你可以通过变通使用查找和截取函数来实现