使用包含如何搜索多个值
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%';
但是最后这个技巧也将匹配 fname
是 John Doe
和 sName
是 Jean-Michel
的行:)
这是我正在尝试做的事情:
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%';
但是最后这个技巧也将匹配 fname
是 John Doe
和 sName
是 Jean-Michel
的行:)