Sql Oracle包含不工作

Sql Oracle包含不工作,sql,oracle,Sql,Oracle,我的表中有一列是上下文索引的 CREATE INDEX CIDX_MUSTFIXBY ON TABLE (MUST_FIX_BY) INDEXTYPE IS CTXSYS.CONTEXT NOPARALLEL; 我正在尝试使用where条件进行查询 而且必须像“Q2%”那样修正 然后返回行 但是,当我尝试使用where条件进行查询时 并且包含(必须通过'Q2'固定)>0 并且它不返回任何行 有人能告诉我为什么like起作用而contains不起作用吗?两个可能的原因-索引可能不同步,con

我的表中有一列是上下文索引的

CREATE INDEX CIDX_MUSTFIXBY ON TABLE
  (MUST_FIX_BY)
INDEXTYPE IS CTXSYS.CONTEXT
NOPARALLEL;
我正在尝试使用where条件进行查询

而且必须像“Q2%”那样修正

然后返回行

但是,当我尝试使用where条件进行查询时

并且包含(必须通过'Q2'固定)>0

并且它不返回任何行


有人能告诉我为什么like起作用而contains不起作用吗?

两个可能的原因-索引可能不同步,
contains
似乎与单词匹配,而
like
与字符串匹配

两个字符串的示例,其中
LIKE
同时匹配两个字符串,但
包含两个字符串:

create table test1(must_fix_by varchar2(4000));
create index cidx_mustfixby on test1(must_fix_by) indextype is ctxsys.context;
insert into test1 values('Q234567');
insert into test1 values('Q2 234567');
select * from test1 where must_fix_by like 'Q2%';

MUST_FIX_BY
-----------
Q234567
Q2 234567

select * from test1 where contains(must_fix_by, 'Q2') > 0;

no rows selected
默认情况下,
上下文
索引需要设置。您需要运行:
exec ctx_ddl.sync_index('cidx_mustfixby')
,或者您需要在提交时使用
创建索引

exec ctx_ddl.sync_index('cidx_mustfixby');
select * from test1 where contains(must_fix_by, 'Q2') > 0;

MUST_FIX_BY
-----------
Q2 234567
这解决了其中一个问题。但是
Q234567
仍然不匹配。我对Oracle文本了解不多,甚至找不到关于
CONTAINS
如何工作的简单描述。但它似乎是基于完整的单词而不是字符串。需要有某种单词边界
在Q2和其他字符之间,通过简单的
CONTAINS
过滤器将其提取。

使用CONTAINS时,还需要添加%

AND contains(must_fix_by, 'Q2%') > 0

你想通过第二个问题得到什么?是否需要计数(contains(contains)(must_fix_by,'Q2'))>0以确定有多少记录包含该字符串?我希望查询返回must_fix_by中包含Q2的所有行。我知道我可以这样做,但我想知道为什么contains不起作用。哦,对不起,我看错了问题。