Sql поиск нескольких слов в строке

Какой самый эффективный и элегантный SQL-запрос ищет строку, содержащую слова "David", "Moses" и "Robi" . Предположим, что таблица имеет имя T и столбец C.

Ответ 1

Select * from table where 
  columnname like'%David%' and 
  columnname like '%Moses%' and columnname like'%Robi%' 

Ответ 2

В SQL Server 2005+ с включенной полнотекстовой индексацией я бы сделал следующее:

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

Если вы хотите, чтобы ваш поиск возвращал результаты, в которых результат был префикс Дэвида, Роба или Мозеса, вы могли бы сделать:

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

Ответ 3

Oracle SQL:

select * 
from MY_TABLE
where REGEXP_LIKE (company , 'Microsodt industry | goglge auto car | oracles    database')
  • company - имя столбца базы данных.
  • результаты - этот SQL покажет вам, если строки столбцов компании содержат одну из этих компаний (OR phrase) обратите внимание, что: никаких диких символов не требуется, он встроен.

Дополнительная информация: http://www.techonthenet.com/oracle/regexp_like.php

Ответ 4

если вы поместите все искомые слова в таблицу времени, скажите @tmp и столбец col1, вы можете попробовать следующее:

Select * from T where C like (Select '%'+col1+'%' from @temp);

Ответ 5

Может быть, EXISTS может помочь.

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

Ответ 6

Вот что я использую для поиска нескольких слов в нескольких столбцах - SQL-сервер

Надеюсь, мой ответ поможет кому-то :) Спасибо

declare @searchTrm varchar(MAX)='one two three ddd 20   30 comment'; 
--select value from STRING_SPLIT(@searchTrm, ' ') where trim(value)<>''
select * from Bols 
WHERE EXISTS (SELECT value  
    FROM STRING_SPLIT(@searchTrm, ' ')  
    WHERE 
        trim(value)<>''
        and(    
        BolNumber like '%'+ value+'%'
        or UserComment like '%'+ value+'%'
        or RequesterId like '%'+ value+'%' )
        )

Ответ 7

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');