【发布时间】:2015-02-21 00:52:42
【问题描述】:
我有一个 MYSQL 数据库,需要从字段中删除一些数据。
我现在的数据是这样的..
gttp://www.somesite.com?ref=1234567
gttp//notquitealink.com/ref.php?r=myreferral
我正在尝试删除 gttp://www.somesite.com?ref= 以仅保留 = 之后的最后一部分
所以我希望数据看起来像这样
1234567
myreferral
我从上一个问题中找到了这段代码。 MySQL Regex Search and replace
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 命令。所以我只能试图弄清楚我做错了什么。
感谢任何帮助。
【问题讨论】:
-
@Buster 这仅选择 5 条记录......在 7000 条记录中,它们都以 w 结尾
-
对不起,我现在不能测试,但我明天会研究一下
-
SELECT * FROM
tb_te_builder_userWHERE tebu_refID REGEXP '.*\=(.+)'