使用包含如何搜索多个值

Using Contains how to search for more than one value

这是我正在尝试做的事情:

select * from Person where CONTAINS((fName,sName),'John AND Doe')

因此,我正在尝试搜索 John Doe,但我发现我无法在此处使用 AND(仅显示我的思路),那么如何在 fName 中搜索 John 并在 sName 中搜索 Doe?但我不想像这样使用“包含”两次:

SELECT * FROM Person 
WHERE CONTAINS((fName), 'John')
AND CONTAINS((sName), 'Doe');

因为我们可以

(fName,sName)

但是我不能使用

'John','Doe'/'John' AND 'Doe'

这应该有效:

SELECT * FROM dbo.Person
WHERE CONTAINS((fName), 'John')
AND CONTAINS((sName), 'Doe');

但是在你的情况下你不想使用 2 包含所以:

或者,您可以添加一个带有全文索引的新计算列。

像这样添加一列:

computedCol AS fName+ ' ' + sName 

并创建全文索引:

CREATE FULLTEXT INDEX ON Person(computedCol LANGUAGE 1033)
KEY INDEX pk_Person_yourPrimaryKeyName

那么你可以这样做:

SELECT * FROM dbo.Person
WHERE CONTAINS(*, 'John AND Doe')

希望有用。

你的说法

SELECT * FROM Person 
WHERE CONTAINS((fName), 'John')
AND CONTAINS((sName), 'Doe');

无法编译,因为包含 returns 一个数字,而不是布尔值。

它应该在 oracle 上响应这种错误

ORA-00920: opérateur relationnel non valide
00920. 00000 -  "invalid relational operator"

(关系运算符错误的原因不是AND的存在,而是因为你试图AND两个数字)

你打算做什么?如果你想 select 人 table 中的行,其 fName 列包含子字符串 John 并且其 sName 列包含子字符串 Doe ,您可以使用 like 运算符,它使用 % 作为通配符。

SELECT * FROM Person
WHERE fName LIKE '%John%'
and sName LIKE '%Doe%'

我不太练习 CONTAINS 方法,但如果你想使用它,根据文档,你应该使用类似

SELECT * FROM Person
WHERE CONTAINS(fName, 'John') > 0
and CONTAINS(sName,'Doe') > 0

如果你真的不想使用 AND 运算符(无论出于什么晦涩的原因,比如证明 sql 注入过滤器是坏的),你可以使用这个技巧:比较2 列和 like 运算符像这样

SELECT * FROM Person 
WHERE fName || sName like '%John%Doe%';

但是最后这个技巧也将匹配 fnameJohn DoesNameJean-Michel 的行:)