是否可以在MySQL查询中进行更多'高级'字符串替换?我读到了REPLACE()
方法,但据我所知,它不能用于花哨的东西。
基本上,我要做的是从大型数据集中的特定列中删除所有HTML标记。能够在单个查询中执行此操作比使用PHP在其间进行处理要冷却得多。我可以做一些优雅的事情,以便删除< >
中包含的所有内容吗?
我刚刚意识到还有另外一个小问题......由于之前的一些不正确的数据转换,一些标签现在包含&lt;和&gt; 自己 ...最坏的情况看起来像<(><<)>b>
。甚至不问如何,但事情似乎已经非常错误。无论如何,伟大的思想对此有很好的想法?
答案 0 :(得分:2)
简短回答:不,这不能在SQL中完成。这是您需要在编程语言中完成的工作 - 您可以使用任何编程语言。
鉴于这不是正确的HTML,使用传统方法解析它甚至可能是不可能的。也许一些可怕的hackish正则表达式会有所帮助,或者你可能会找到一些特定的“错误”字符串(例如,如果(><<)>
通常出现),并用传统的REPLACE()
删除它们。
当然,细节取决于您的数据以及您可用的工具,但MySQL无法完成大部分工作。
答案 1 :(得分:1)
你可以破解一个功能,但我不认为这是可行的方法。
CREATE FUNCTION strip_tags( String VARCHAR(9999) )
RETURNS VARCHAR(9999)
DETERMINISTIC
BEGIN
DECLARE start, end, len INT;
SET start = LOCATE('<', String);
SET end = LOCATE('>', String, start);
WHILE start> 0 AND end > 0 DO
BEGIN
SET String = INSERT(String, start, end, '');
SET start = LOCATE('<', String);
SET end = LOCATE('>', String, start);
END;
END WHILE;
RETURN String;
END;
免责声明:代码未经测试。
答案 2 :(得分:0)
抱歉,你运气不好。 MySQL没有正则表达式或类似的替代教师。