Как использовать 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' означает, что регистр не учитывается. Порядок имен не имеет значения.

Другие вопросы по тегам