Mysql正则表达式搜索和替换未更新记录。

32 浏览
0 Comments

Mysql正则表达式搜索和替换未更新记录。

我有一个MYSQL数据库,需要从一个字段中删除一些数据。

我的当前数据是这样的...

gttp://www.somesite.com?ref=1234567
gttp//notquitealink.com/ref.php?r=myreferral

我想删除 gttp://www.somesite.com?ref= ,只留下=后面的部分

所以我希望数据看起来像这样

1234567
myreferral

我从以前的问题中找到了这段代码。 MySQL正则表达式搜索和替换

DELIMITER $$
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$$
DELIMITER ;

我运行它并创建了一个可以查询的函数。

当我运行这个查询时...

UPDATE `tb_te_builder_user` SET tebu_refID = regex_replace('gttp(.*)=', '',tebu_refID);

我得到0行受影响。(查询花费了10.9480秒)

但是当我尝试做一个选择时

SELECT * FROM `tb_te_builder_user` WHERE tebu_refID REGEXP 'gttp(.*)='

我得到超过7,000条记录返回。

我不太确定如何解释这个...我觉得我在这里漏掉了一些非常简单的东西。

我还在看这个解决方案 https://github.com/mysqludf/lib_mysqludf_preg#readme 但是我没有权限在我的服务器上使用make命令。所以我只能尝试弄清楚我做错了什么。

非常感谢您的帮助。

0
0 Comments

问题出现的原因是MySQL的正则表达式替换函数只能用于单个字符的模式,无法处理字符串模式。解决方法包括使用用户自定义函数(如mysql-udf-regexp)来处理字符串模式,但需要编译和添加到MySQL安装中;使用MariaDB替代MySQL,它具有完全支持字符串模式的内置函数regex_replace;或者使用外部解决方案,如PHP和PHP的preg_replace函数。如果无法进行这些操作,只能通过PHPMyadmin来访问MySQL,那么解决方法可能有限。

0