contains(columnname, 'ABC')=0
这意味着搜索不包含单词'ABC'的数据
contains(columnname, 'ABC and XYZ')=0
contains(columnname, 'ABC or XYZ')=0
这两个sql是什么意思?我测试了它们,没有语法错误,但它们没有像我预期的那样工作,'和'看起来像'或',而'或'似乎是'和',任何人都可以帮忙解释一下吗? 在Google中找到的所有文档都包含contains()> 0,这些不是我需要的。
提前感谢。
答案 0 :(得分:5)
根据oracle documentation,contains
函数:
返回所选行的相关性分数
如果你要求
contains(columnname, 'ABC')=0
您实际上要求得分0
,这意味着:列名不包含'ABC'
根据文件:
在AND查询中,返回的分数是最低查询字词的分数
在OR查询中,返回的分数是最高查询字词的分数
所以如果你要求:
contains(columnname, 'ABC and XYZ')=0
然后,如果'ABC'或'XYZ'得分为0
,它将得分最低,这就是你从该函数得到的,所以你是实际上要求:columnname不包含'ABC'或'XYZ'(至少其中一个)。
or
-
contains(columnname, 'ABC or XYZ')=0
只有当'ABC'和'XYZ'得分为0
时,该函数才会返回0
,所以您实际上要求:columnname doesn' t包含'ABC'和'XYZ'(两者都有)。
恕我直言,这种行为是正确的,因为它符合De-Moragan's Laws