在MySQL结果中重新发出多个子串

时间:2016-01-18 22:36:09

标签: mysql regex preg-replace

有没有办法在单个mysql列字段中替换多个子字符串? 在我的结果中,有以下字段:

'&DY, &Q3'

在这种情况下,DY和Q3是匹配代码,我必须用定义的Word替换。

我尝试使用此regex_replace函数

CREATE FUNCTION `regex_replace`(pattern VARCHAR(1000),replacement VARCHAR(1000),original VARCHAR(1000)) RETURNS varchar(1000)
    DETERMINISTIC
BEGIN 
 DECLARE temp VARCHAR(1000); 
 DECLARE ch VARCHAR(1); 
 DECLARE i INT;
 SET i = 1;
 SET temp = '';
 IF original REGEXP pattern THEN 
  loop_label: LOOP 
   IF i>CHAR_LENGTH(original) THEN
    LEAVE loop_label;  
   END IF;
   SET ch = SUBSTRING(original,i,1);
   IF NOT ch REGEXP pattern THEN
    SET temp = CONCAT(temp,ch);
   ELSE
    SET temp = CONCAT(temp,replacement);
   END IF;
   SET i=i+1;
  END LOOP;
 ELSE
  SET temp = original;
 END IF;
 RETURN temp;
END

我的SQL查询:

SELECT REGEX_REPLACE(fm.column,'(\&[\w]{2})*','My Word') FROM `table` fm WHERE id = '123'

没有工作。也许有一个问题是,我的子串开始于"&"这是正则表达式中的运算符!?

1 个答案:

答案 0 :(得分:-1)

尝试这个,但我使用MariaDB他们有REGEX_REPLACE内部

https://mariadb.com/kb/en/mariadb/regexp_replace/

SELECT REGEXP_REPLACE('&DY, &Q3','\(\&[A-Z0-9]+\),*','My Word');

<强>结果:

My Word My Word