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

时间:2015-10-21 08:47:41

标签: sql oracle sql-like textmatching

我有一张cust表

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查询获取客户?

5 个答案:

答案 0 :(得分:1)

如果要匹配的模式是

s <- stack(r, r*0.8, r*0.6, r*0.4)
levelplot(s, 
          margin=FALSE,                       
          colorkey=list(
            space='bottom',                   
            labels=list(at=-5:5, font=4),
            axis.line=list(col='black'),
            width=0.75
          ),    
          par.settings=list(
            strip.border=list(col='transparent'),
            strip.background=list(col='transparent'),
            axis.line=list(col='transparent')
          ),
          scales=list(draw=FALSE),            
          col.regions=viridis,                   
          at=seq(-5, 5, len=101),
          names.attr=rep('', nlayers(s))) +           
  layer(sp.polygons(oregon, lwd=3))

你可以写:

string1<space>anything<space>string2

答案 1 :(得分:0)

为什么不呢

select * from cust where name Like 'John%Matt' ;

答案 2 :(得分:0)

 SELECT *
   FROM custtable
  WHERE upper(NAME) LIKE '%' || upper(:first_word) || '%'
    AND upper(NAME) LIKE '%' || upper(:second_word) || '%'

答案 3 :(得分:0)

您必须使用LIKE吗? Oracle有很多更强大的搜索选项。

http://docs.oracle.com/cd/B19306_01/server.102/b14220/content.htm#sthref2643

我会看那些。

答案 4 :(得分:0)

我相信你需要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>

这里的正则表达式字符串指定名称包含&#39; matt&#39;或者&#39; deo&#39;而且我是&#39;我&#39;意味着它不区分大小写。名字的顺序无关紧要。