如何在查询中使用 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 Deo
或 john
怎么办
当试图找到一个确切的名字时,上述无法实现。即使给出了 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' 表示不区分大小写。名称的顺序无关紧要。
我有一个客户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 Deo
或 john
当试图找到一个确切的名字时,上述无法实现。即使给出了 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' 表示不区分大小写。名称的顺序无关紧要。