我创建了一个包含两列的表格。我插入了两行。
id name
1 narsi reddy
2 narei sia
一个是简单的数字类型,另一个是 CLOB 类型。所以我决定对其使用索引。我通过使用 contains 查询了这一点。 查询:
select * from emp where contains(name,'%a%e%')>0
2 narei sia
我预计会有 2 个人来,但没有。但如果我给予同样的东西,它就给出了我想要的东西。 查询:
select * from emp where name like '%a%e%'
ID NAME
1 (CLOB) narsi reddy
2 (CLOB) narei sia
2 rows selected
最后我明白了,like 是搜索整个文档或段落,而 contains 是在单词中查找。
那么我怎样才能获得所需的输出?
最佳答案
LIKE 和 CONTAINS 是根本不同的搜索方法。
LIKE是一个非常简单的字符串模式匹配器 - 它识别两个通配符 (%) 和 (_),分别匹配零个或多个或恰好一个字符。在您的情况下, %a%e% 匹配表中的两条记录 - 它查找零个或多个字符,后跟 a
,后跟零个或多个字符,后跟 e
,后跟零个或多个字符。它的返回值也非常简单:它要么返回“匹配”,要么返回“不匹配”——没有灰色阴影。
CONTAINS是一个使用上下文索引的强大搜索工具,它构建了一种可以使用 CONTAINS 搜索语法进行搜索的单词树。它可以用于搜索单个单词、单词组合,并且具有自己丰富的语法,例如 bool 运算符(AND、NEAR、ACCUM)。它还更强大,因为它不是返回简单的“匹配”或“不匹配”,而是返回一个“分数”,可用于按相关性顺序对结果进行排名;例如CONTAINS(col, 'dog NEAR cat') 将为这两个单词都靠近的文档返回更高的分数。
关于sql - oracle中Like和Contains()搜索条件的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5700795/