数据库中我有一张表,里面有一个字段存的是静态页面的html和文本的整合的内容,现在我想通过sql来查询这张表,搜索出里面该字段值中文本内容包含搜索值的记录,而html标签中是否包含不管。现在是由于没有找到mysql中正则表达式替换的方法,来过滤这个字段,把html标签去不过滤掉,然后我再进行比较查询,请问大家是否有比较好的方法来做这个啊?说明:其实这个可以在java代码中做的,java里面有可以过滤html标签的正则表达式,也是可行的,但是由于数据量太多了,所以我不想在代码中过滤比较,只想在sql层次上来解决这个问题。
当然我也想到了,再加一个字段专门用来存这个文本内容的,搜索时搜这个,显示时用那个带html标签的,但是我感觉不好。
当然我也想到了,再加一个字段专门用来存这个文本内容的,搜索时搜这个,显示时用那个带html标签的,但是我感觉不好。
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
(
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标签全部过滤掉
存储过程怎么写啊,sql都不支持替换,意思存储过程里就支持了吗,不会写,麻烦能不能给个例子啊,谢谢啦
你可以自己先写起来,有什么问题可以贴出来大家一起讨论。
我是这么写的,
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标签的一些内容,而不是所有带<>尖括号的内容