如何在查询中使用 LIKE 来查找多个单词?

How to use LIKE in a query to find multiple words?

我有一个客户table

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 Deojohn

怎么办

当试图找到一个确切的名字时,上述无法实现。即使给出了 2 个字符串,我如何进行 LIKE 查询来获取客户?

如果要匹配的模式是

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#sthref2643

我会看看那些。

我相信你需要 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' 表示不区分大小写。名称的顺序无关紧要。