Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql在字符串中搜索多个单词_Sql - Fatal编程技术网

sql在字符串中搜索多个单词

sql在字符串中搜索多个单词,sql,Sql,寻找包含单词David、Moses和Robi的字符串的最高效、最优雅的SQL查询是什么。假设在SQL Server 2005+中,在打开全文索引的情况下,表名为T,列为C.,我将执行以下操作: Select * from table where columnname like'%David%' and columnname like '%Moses%' and columnname like'%Robi%' SELECT * FROM T WHERE CONTAINS(C,

寻找包含单词David、Moses和Robi的字符串的最高效、最优雅的SQL查询是什么。假设在SQL Server 2005+中,在打开全文索引的情况下,表名为T,列为C.

,我将执行以下操作:

Select * from table where 
  columnname like'%David%' and 
  columnname like '%Moses%' and columnname like'%Robi%' 
SELECT *
  FROM T
 WHERE CONTAINS(C, '"David" OR "Robi" OR "Moses"');
如果您希望搜索返回结果前缀为David、Robi或Moses的结果,您可以执行以下操作:

SELECT *
  FROM T
 WHERE CONTAINS(C, '"David*" OR "Robi*" OR "Moses*"');

如果您将所有搜索的单词放在临时表中,比如@tmp和col1列,那么您可以尝试以下方法:

Select * from T where C like (Select '%'+col1+'%' from @temp);
Oracle SQL: Oracle SQL中的IN运算符可用于:

select 
    namet.customerfirstname, addrt.city, addrt.postalcode
from schemax.nametable namet
join schemax.addresstable addrt on addrt.adtid = namet.natadtid
where namet.customerfirstname in ('David', 'Moses', 'Robi'); 
Oracle SQL:

company-是数据库列名。 结果-此SQL将显示公司列行是否包含这些公司或短语之一 请注意:不需要野生字符,它是内置的。 更多信息请访问:

可能存在可以帮助您

and exists (select 1 from @DocumentNames where pcd.Name like DocName+'%' or CD.DocumentName like DocName+'%')

下面是我用来在多个列中搜索多个单词的方法-SQL server

希望我的回答能帮助别人:谢谢

声明@searchTrm varcharMAX='一二三ddd 20 30注释'; -从字符串中选择值_SPLIT@searchTrm,“”其中包含值 从Bols中选择* 哪里存在选择值 从字符串_SPLIT@searchTrm, ' ' 哪里 trimvalue 和 类似“%”+值+“%”的数字 或类似“%”+value+“%”的用户注释 或请求ID,如“%”+值+“%”

如果你关心术语的顺序,你可以考虑使用类似于

的语法。
select * from T where C like'%David%Moses%Robi%'

首先,将代码标记为代码。第二,它不起作用,至少在SQL Server 2008中不起作用。@sara:我刚刚在SQL Server 2008 R2I中测试过它,我尝试过这个,我得到子查询返回的值超过了1。当子查询后跟=、!=、时,不允许这样做=取决于SQL方言。哪台服务器?您是要匹配同一字段中的所有三个字,还是只返回与这三个字中任何一个匹配的所有行?我把它理解为匹配所有,但看起来很多人都把它解释为任何。什么是RDBMS?您想知道列中的同一行是否包含全部三行,或者只是列本身包含某些行数上的全部三行?数据的结构是什么,它们是单个名称还是我们需要考虑额外的字符串数据?实际的数据类型是什么?除了拉丁语,我们还需要担心外语字符吗?问了34个问题的人可能应该知道该提供什么信息。谢谢大家。出于某种原因,对于我的一位DBA朋友来说,完全相同的措辞(没有澄清)就足以为我提供答案。谢谢你给我添麻烦@Wiseguy——我最初的措辞是准确的,但@hamlin11对其进行了编辑,可能如你所说的那样使其不清楚。虽然我相信他的意思是好的。第二个查询是正确的,在字符串中搜索关键字,而第一个查询只检索那些特定单词的值如果你关心这些词的顺序,你可以考虑使用一个像戴维那样的语法,比如“%%摩西%%Ropi%”,如果你使用一个连接查询,需要在同一列中寻找多个字符串,把包含普通的括号和我理解问题的方式,你想要的是AND而不是ORS——这也意味着多个前缀是没有意义的。但是感谢您添加了这些信息。免费文本搜索/索引是绝对垃圾的-使用它,而且索引不会立即重建-例如,自动跟踪仍然只会每30分钟生成一次,因此,使用此选项,您将得到的只是无法找到刚输入内容的愤怒客户。如果您不关心顺序,该场景如何?在这种情况下,请参阅上面接受的答案
select * from T where C like'%David%Moses%Robi%'