#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