当存在特定单词或短语时,排除返回的数据


下面是一个返回的数据示例。
ID2345

假设你只是不想让句子包含被审查的单词,但忽略包含它的单词。

然后这将适用于大多数SQL方言
但它并不完美
F.e.找不到anus!

select *
from test
where concat(' ',description_snippet,' ') not like 
concat('% ',censored_word,' %') 

一些RDBMS具有接受正则表达式的函数。这提供了更多的灵活性
F.例如单词边界的使用。

下面是一个在Postgresql中工作的例子

测试

create table test (
 ID serial primary key, 
 censored_word varchar(30),
 description_snippet varchar(30)
);
insert into test (id, censored_word, description_snippet) values
  (1, 'anus', 'anus')
, (2, 'anus', 'manuscript submitted')
, (3, 'anus', 'tetanus vaccination') 
, (4, 'anus', 'oceanus proposal')
, (5, 'rere', 'prerequisite includes')
, (6, 'rere', 'no rere without anus')
select *
from test
where description_snippet !~ concat('m(', censored_word, ')M') 
td style="text-align:right;">3td style="text align=right;">5
idrevisted_word
2肛门肛门破伤风疫苗接种
4肛门重新阅读先决条件包括

您可以使用regexp来搜索description_snippets,这些description_snippets在reviered_word之前或之后至少有一个字母。

select * from test where lower(description_snippet) regexp lower(concat("[[:alpha:]]",censored_word,"|",censored_word,"[[:alpha:]]"));

或者像一样使用

select * from test where lower(description_snippet) like (concat('%',lower(censored_word))) or lower(description_snippet) like(concat(lower(censored_word),"%"));

http://sqlfiddle.com/#!9/a471f3/7

最新更新