我需要使用 Oracle 11g 的 Contains() 函数来搜索用户键入的某些字段中包含的某些确切文本。我被要求不要使用“喜欢”运算符。
根据Oracle 文档,要使一切正常工作,您需要:
- 双
}
字符 - 将整个输入放在
{}
这在大多数情况下都有效,除了少数情况。下面是一个测试用例:
create table theme
(name varchar2(300 char) not null);
insert into theme (name)
values ('a');
insert into theme (name)
values ('b');
insert into theme (name)
values ('a or b');
insert into theme (name)
values ('Pdz344_1_b');
create index name_index on theme(name) indextype is ctxsys.context;
如果'or'
运算符被解释,我会得到所有四个结果,但希望不是这样。现在,如果我运行以下命令,我希望只能找到'a or b'
.
select * from theme
where contains(name, '{a or b}')>0;
不过我也明白了'Pdz344_1_b'
。但是没有'a'
,'o'
没有'r'
,我发现这个文本匹配非常令人惊讶。关于 contains() 的语法有什么我不明白的吗?