以下是我要做的事:
select * from Person where CONTAINS((fName,sName),'John AND Doe')所以我试图寻找无名氏,但我得到了我无法使用的东西,在这里(只是展示我的思维链),我如何在fName中搜索John,在sName中搜索Doe呢?但我不想像这样两次使用“包含”:
SELECT * FROM Person
WHERE CONTAINS((fName), 'John')
AND CONTAINS((sName), 'Doe');既然我们可以
(fName,sName)
但我不能用
'John','Doe'/'John‘和'Doe'
发布于 2022-03-02 14:33:58
你的陈述
SELECT * FROM Person
WHERE CONTAINS((fName), 'John')
AND CONTAINS((sName), 'Doe');无法编译,因为包含返回一个数字,而不是布尔值。
在甲骨文上,它将以这种错误作出反应。
ORA-00920: opérateur relationnel non valide
00920. 00000 - "invalid relational operator"(关系运算符错误的原因不是AND的存在,而是因为您尝试AND两个数字)
你打算做什么?如果要在person表中选择其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 :)的行相匹配。)
发布于 2022-03-02 14:22:42
这应该是可行的:
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')希望它能成功。
https://stackoverflow.com/questions/71323645
复制相似问题