首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用包含如何搜索多个值。

使用包含如何搜索多个值。
EN

Stack Overflow用户
提问于 2022-03-02 13:36:26
回答 2查看 55关注 0票数 0

以下是我要做的事:

代码语言:javascript
复制
select * from Person where CONTAINS((fName,sName),'John AND Doe')

所以我试图寻找无名氏,但我得到了我无法使用的东西,在这里(只是展示我的思维链),我如何在fName中搜索John,在sName中搜索Doe呢?但我不想像这样两次使用“包含”:

代码语言:javascript
复制
SELECT * FROM Person 
WHERE CONTAINS((fName), 'John')
AND CONTAINS((sName), 'Doe');

既然我们可以

(fName,sName)

但我不能用

'John','Doe'/'John‘和'Doe'

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-02 14:33:58

你的陈述

代码语言:javascript
复制
SELECT * FROM Person 
WHERE CONTAINS((fName), 'John')
AND CONTAINS((sName), 'Doe');

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

在甲骨文上,它将以这种错误作出反应。

代码语言:javascript
复制
ORA-00920: opérateur relationnel non valide
00920. 00000 -  "invalid relational operator"

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

你打算做什么?如果要在person表中选择其fName列包含子字符串John且其sName列包含子字符串Doe的行,则可以使用like运算符,该运算符将%用作通配符。

代码语言:javascript
复制
SELECT * FROM Person
WHERE fName LIKE '%John%'
and sName LIKE '%Doe%'

我并不经常使用CONTAINS方法,但是如果您想要使用它,根据文档,您应该使用以下内容

代码语言:javascript
复制
SELECT * FROM Person
WHERE CONTAINS(fName, 'John') > 0
and CONTAINS(sName,'Doe') > 0

如果您真的不想使用AND运算符(无论出于什么原因,比如证明sql注入过滤器是错误的),您可以使用以下技巧:比较2列和like运算符的连接,如下所示

代码语言:javascript
复制
SELECT * FROM Person 
WHERE fName || sName like '%John%Doe%';

但最后一个技巧还将与fnameJohn DoesNameJean-Michel :)的行相匹配。)

票数 0
EN

Stack Overflow用户

发布于 2022-03-02 14:22:42

这应该是可行的:

代码语言:javascript
复制
SELECT * FROM dbo.Person
WHERE CONTAINS((fName), 'John')
AND CONTAINS((sName), 'Doe');

但在您的情况下,您不想使用2包含如下:

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

添加如下列:

代码语言:javascript
复制
computedCol AS fName+ ' ' + sName 

并创建全文索引:

代码语言:javascript
复制
CREATE FULLTEXT INDEX ON Person(computedCol LANGUAGE 1033)
KEY INDEX pk_Person_yourPrimaryKeyName

然后你就可以这样做:

代码语言:javascript
复制
SELECT * FROM dbo.Person
WHERE CONTAINS(*, 'John AND Doe')

希望它能成功。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71323645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档