mysql将正则表达式替换为字符串中大括号中的内容

时间:2011-06-09 00:23:26

标签: mysql regex replace

以下是我的mysql数据库中的几行列数据

数据

test(victoryyyyy)king

java(vaaaarrrryy)side

(vkittt)sap

flex(vuuuuu)

k(vhhhhyyy)kk(abcd)k

在所有行中都有以

开头的随机字符串

(v

结束
)

我的任务: - 我必须将'(v'到')'中的所有字符串替换为空格(即'')我不应该触及大括号中的其他值,上面的情况我不应该在最后一行替换(abcd)

我的意思是上面的例子结果应该是

test king

java side

 sap

flex 

kkk(abcd)k

有人可以帮帮我吗?

谢谢

此致

基兰

2 个答案:

答案 0 :(得分:1)

Mysql不支持替换任务的正则表达式。

因此,您只能使用字符串函数来查找和替换必要的部分。

答案 1 :(得分:0)

我为此编写了自己的函数,它正在运行。谢谢你们。

drop FUNCTION  replace_v;

CREATE FUNCTION replace_v (village varchar(100)) RETURNS varchar(100)
DETERMINISTIC

   BEGIN  
      DECLARE a INT Default 0 ;
      DECLARE lengthofstring INT Default 0 ;
      DECLARE returnString varchar(100) Default '' ;
      DECLARE charString varchar(100) Default '' ;
      DECLARE found       char(1) default 'N';
      declare seccharString varchar(100) Default '' ;
      set lengthofstring = length(village); 

  simple_loop: LOOP
         SET a=a+1;
         set charString=substr(village,a,1);
         if(charString = '(') then
           set seccharString=substr(village,a+1,1);
           if( seccharString = 'v' || seccharString = 'V' || seccharString = 'p' || seccharString = 'P'
           || seccharString = 'm' || seccharString = 'M' ) then
               set found='y';
            end if;
          end if ;      

          if(found='n') then
            set returnString = concat (returnString,charString);
          end if;  

         if(charString = ')') then 
            set found='n';
          end if ;            

          IF a>=lengthofstring THEN
              LEAVE simple_loop;
          END IF;
       END LOOP simple_loop;

       if ( found = 'y') then
         set returnString =village;
        end if;  

         RETURN (replace( returnString,'&', ' '));
END