数据库中我有一张表,里面有一个字段存的是静态页面的html和文本的整合的内容,现在我想通过sql来查询这张表,搜索出里面该字段值中文本内容包含搜索值的记录,而html标签中是否包含不管。现在是由于没有找到mysql中正则表达式替换的方法,来过滤这个字段,把html标签去不过滤掉,然后我再进行比较查询,请问大家是否有比较好的方法来做这个啊?说明:其实这个可以在java代码中做的,java里面有可以过滤html标签的正则表达式,也是可行的,但是由于数据量太多了,所以我不想在代码中过滤比较,只想在sql层次上来解决这个问题。
当然我也想到了,再加一个字段专门用来存这个文本内容的,搜索时搜这个,显示时用那个带html标签的,但是我感觉不好。

解决方案 »

  1.   

     (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  2.   

    create table test1
    (
    id int(10),
    content text
    )
    insert into test1 values('1','List:wo kao <br> <p>xxx xxx</p><li>A</li><li>B<li>C<B>this is b!</B><table><tr><td>3434 34342 13132</td><tr></table>')
    你可以插入n条类似的记录,现在我想通过sql查出
    List:wo kao  xxx xxxABCthis is b!3434 34342 13132
    这个结果,即把里面的html标签全部过滤掉
      

  3.   

    MYSQL中通过其标准的函数无法用SQL语句实现。MYSQL中仅支持REGEXP的简单匹配查询,不支持REGEXP_REPLACE。可以在MYSQL中自己写存储函数来实现。
      

  4.   


    存储过程怎么写啊,sql都不支持替换,意思存储过程里就支持了吗,不会写,麻烦能不能给个例子啊,谢谢啦
      

  5.   

    replace(replace(content,'<br>',''),'<p>','')
      

  6.   

    存储过程等同于自己写程序来分析字符串,把<...>的东西都去掉。 
    你可以自己先写起来,有什么问题可以贴出来大家一起讨论。
      

  7.   


    我是这么写的,
    DELIMITER $$DROP FUNCTION IF EXISTS `abgent_website`.`removeHtml`$$CREATE FUNCTION `removeHtml`(s varchar(255)) RETURNS varchar(255)
    BEGIN
        declare d int(20);
        declare dd int(20);
        declare sumstr varchar(255);
        while (instr(s,'<')!=0 && instr(s,'>')!=0) do
          
          set d = instr(s,'<');
          set dd = instr(s,'>');
          set sumstr = substr(s,1,d-1);
          set s = substr(s,dd+1);
          set s = concat(sumstr,s);
        end while;
        return s;
        END$$DELIMITER ;我是这么写的,但是我感觉里面不太好,一旦我想在里面写入带<>内容,它都给我过滤掉了,其实我只想过滤属于html标签的一些内容,而不是所有带<>尖括号的内容
      

  8.   

    如果大家有更好的建议,可以告诉我,这是我邮箱[email protected],谢谢啦