Как использовать LIKE в запросе, чтобы найти несколько слов?
У меня есть столик
id name class mark
1 John Deo Matt Four 75
2 Max Ruin Three 85
3 Arnold Three 55
4 Krish Star HN Four 60
5 John Mike Four 60
6 Alex John Four 55
Я хотел бы найти клиента, который может быть указан как John Matt
без deo
строка. Как использовать условие LIKE для этого?
SELECT * FROM cust WHERE name LIKE '%John Matt%'
Результат должен получить строку 1.
что если строка поиска Matt Deo
или же john
Вышеприведенное не может быть реализовано при попытке найти точное имя. Как я могу сделать запрос LIKE для выборки клиента, даже если даны 2 строки?
5 ответов
Если шаблон для сопоставления
string1<space>anything<space>string2
ты можешь написать:
like string1||' % '||string2
Почему не это
select * from cust where name Like 'John%Matt' ;
SELECT *
FROM custtable
WHERE upper(NAME) LIKE '%' || upper(:first_word) || '%'
AND upper(NAME) LIKE '%' || upper(:second_word) || '%'
Вы должны использовать LIKE
? У Oracle есть множество более мощных опций поиска.
http://docs.oracle.com/cd/B19306_01/server.102/b14220/content.htm
Я бы посмотрел на них.
Я считаю, что вам нужно REGEXP_LIKE():
SQL> with tbl(name) as (
select 'John Deo Matt' from dual
)
select name
from tbl
where regexp_like(name, 'matt|deo', 'i');
NAME
-------------
John Deo Matt
SQL>
Здесь строка регулярного выражения указывает, что имя содержит 'matt' ИЛИ 'deo', а 'i' означает, что регистр не учитывается. Порядок имен не имеет значения.