mysql заменяет регулярное выражение чем угодно в фигурных скобках в строке

#mysql #regex #replace

#mysql #регулярное выражение #заменить

Вопрос:

Ниже приведены несколько строк данных столбца в моей базе данных 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
  

Кто-нибудь, пожалуйста, может мне помочь?

Спасибо

С уважением

Kiran

Ответ №1:

Mysql не поддерживает регулярные выражения для задач замены.

Таким образом, вы можете использовать строковые функции только для поиска и подстановки необходимой части.

Комментарии:

1. Спасибо @zerkms за ваш быстрый ответ. Я проверяю на launchpad.net/mysql-udf-regexp . Может быть что-то, что помогает…

2. @Bujji: да, этот UDF может помочь, если вы скомпилируете этот пакет и подключите его к своему серверу.

3. Спасибо за ваш ответ. Я написал свою собственную функцию для своей проблемы, и она работает нормально.

Ответ №2:

Я написал для этого свою собственную функцию, и она работает. Спасибо всем.

 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,'amp;', ' '));
END