1
contains(columnname, 'ABC')=0

这意味着搜索不包含单词“ABC”的数据

contains(columnname, 'ABC and XYZ')=0
contains(columnname, 'ABC or XYZ')=0

这2个sql是什么意思?我测试了它们,没有语法错误,但它们没有按我的预期工作,'and' 看起来像'or','or' 看起来像'and',谁能帮忙解释一下?在 google 中找到的所有文档都是针对 contains()>0 的,这不是我需要的。

提前致谢。

4

1 回答 1

5

根据 oracle文档contains功能:

返回所选每一行的相关性分数

如果你要求

contains(columnname, 'ABC')=0

您实际上要求的分数0意味着:columnname doesn't contain 'ABC'

根据文档:

在 AND 查询中,返回的分数是最低查询词的分数

在 OR 查询中,返回的分数是最高查询词的分数

因此,如果您要求:

contains(columnname, 'ABC and XYZ')=0

那么如果 'ABC''XYZ' 有一个分数,0它的分数将最低,这就是你将从函数中得到的,所以你实际上是在要求:columnname doesn't contain 'ABC' or 'XYZ '(至少其中之一)。

同样的事情 or-

contains(columnname, 'ABC or XYZ')=0

仅当 'ABC''XYZ' 都具有函数的分数时0才会返回0,所以您实际上是在要求: columnname 不包含 'ABC' 和 'XYZ' (两者)。

恕我直言,这种行为是正确的,因为它符合De-Moragan 的法律

于 2012-10-31T09:39:03.197 回答