首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle的Space ()函数中的空格字符

Oracle的Space ()函数中的空格字符
EN

Stack Overflow用户
提问于 2013-10-28 08:14:30
回答 1查看 2.2K关注 0票数 2

我需要使用Oracle11g的contained ()函数来搜索用户键入的某个字段中包含的确切文本。我被要求不要使用“喜欢”操作符。

根据Oracle文档的说法,要想让每件事都正常工作,你需要:

  • }字符
  • 将整个输入放在{}之间

在大多数情况下,除少数情况外,这是可行的。下面是一个测试用例:

代码语言:javascript
复制
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'

代码语言:javascript
复制
select * from theme
where contains(name, '{a or b}')>0;

然而,我也得到了'Pdz344_1_b'。但是没有'a',没有'o',没有'r',我发现这段文字匹配非常令人惊讶。有什么地方我不了解there ()的语法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-28 09:10:10

CONTAINS一点也不像LIKE运算符。因为它使用的是ORACLE TEXT搜索引擎(比如google ),而不仅仅是字符串匹配。

{} -是一个转义标记。意味着你放进去的所有东西都应该被当作文本来转义。

因此,您可以发出查询来查找看起来像a or b的文本,而不是ab。因此,您的查询将与Pdz344_1_b匹配,因为其中包含b char。

只有a字符的行不匹配,因为a字符存在于默认停止列表中。

为什么b不匹配?因为您的匹配序列实际上看起来像a\ or\ b。因此,我们有3个令牌a _or _b (下划线表示空格)。停止列表中的a,并且在b行中没有字符串_b,因为只有一个字符。但是我们在Pdz344_1_b行中确实有这个组合,因为非字母字符被视为空白。如果您删除了{}{b or a}查询,那么您也会得到与b匹配的结果。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19629864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档