Какой самый эффективный и элегантный SQL-запрос ищет строку, содержащую слова "David", "Moses" и "Robi" . Предположим, что таблица имеет имя T и столбец C.
Sql поиск нескольких слов в строке
Ответ 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');