我有一个大型数据库,其中包含有<a>标签的记录,我想删除它们。当然,也有一种方法,我可以创建一个PHP脚本来选择全部,使用strip_tags并更新数据库,但这需要很长时间。那么,如何用一个简单(或复杂)的MySQL查询做到这一点呢?
发布于 2011-10-05 06:00:08
我不认为有任何有效的方法可以单独在MySQL中做到这一点。
MySQL确实有一个REPLACE()函数,但它只能替换常量字符串,而不能替换模式。您可以编写一个MySQL存储函数来搜索和替换标记,但是在这一点上,您最好编写一个PHP来完成这项工作。它可能不是很快,但它可能会写得更快。
发布于 2019-03-25 19:42:22
MySQL >= 5.5提供XML函数来解决您的问题:
SELECT ExtractValue(field, '//text()') FROM table;参考:https://dev.mysql.com/doc/refman/5.5/en/xml-functions.html
发布于 2012-11-12 23:38:09
这就是了:
CREATE FUNCTION `strip_tags`($str text) RETURNS text
BEGIN
DECLARE $start, $end INT DEFAULT 1;
LOOP
SET $start = LOCATE("<", $str, $start);
IF (!$start) THEN RETURN $str; END IF;
SET $end = LOCATE(">", $str, $start);
IF (!$end) THEN SET $end = $start; END IF;
SET $str = INSERT($str, $start, $end - $start + 1, "");
END LOOP;
END;我确保它删除了不匹配的左括号,因为它们是危险的,尽管它忽略了任何不成对的右括号,因为它们是无害的。
mysql> select strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.');
+----------------------------------------------------------------------+
| strip_tags('<span>hel<b>lo <a href="world">wo<>rld</a> <<x>again<.') |
+----------------------------------------------------------------------+
| hello world again. |
+----------------------------------------------------------------------+
1 row in sethttps://stackoverflow.com/questions/7654436
复制相似问题