MySQL模式替换

时间:2009-08-21 10:32:16

标签: mysql string

是否可以在MySQL查询中进行更多'高级'字符串替换?我读到了REPLACE()方法,但据我所知,它不能用于花哨的东西。

基本上,我要做的是从大型数据集中的特定列中删除所有HTML标记。能够在单个查询中执行此操作比使用PHP在其间进行处理要冷却得多。我可以做一些优雅的事情,以便删除< >中包含的所有内容吗?

我刚刚意识到还有另外一个小问题......由于之前的一些不正确的数据转换,一些标签现在包含&lt;和&gt; 自己 ...最坏的情况看起来像<(><<)>b>。甚至不问如何,但事情似乎已经非常错误。无论如何,伟大的思想对此有很好的想法?

3 个答案:

答案 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没有正则表达式或类似的替代教师。