articles表Text列含HTML标签,LIKE查询异常,regexp_replace无效求助
解决HTML标签干扰LIKE查询的问题
首先你的原始查询存在语法错误,缺少WHERE关键字,基础写法应该修正为:
SELECT Text FROM articles WHERE Text LIKE '%aaa%';
但由于Text列包含HTML标签,直接用LIKE会误匹配到HTML代码里的目标字符串(比如<div class="aaa">...</div>这类标签属性里的aaa),所以需要先清洗掉HTML标签和 再执行匹配。你之前的regexp_replace语句不完整,以下是正确的实现方式:
PostgreSQL 版本写法
PostgreSQL的regexp_replace需要指定全局替换参数'g',否则默认只替换第一个匹配项:
SELECT Text FROM articles WHERE regexp_replace(Text, '<[^>]*>| ', '', 'g') LIKE '%aaa%';
MySQL 版本写法(8.0+)
MySQL 8.0及以上支持REGEXP_REPLACE函数,可直接用合并正则完成清洗:
SELECT Text FROM articles WHERE REGEXP_REPLACE(Text, '<[^>]*>| ', '') LIKE '%aaa%';
如果需要返回清洗后的文本而非原始带HTML的内容,可以用子查询简化重复计算:
SELECT cleaned_text FROM ( SELECT REGEXP_REPLACE(Text, '<[^>]*>| ', '') AS cleaned_text FROM articles ) AS temp_table WHERE cleaned_text LIKE '%aaa%';
内容的提问来源于stack exchange,提问作者itdev
相关产品推荐
相关产品推荐

