如何在LIKE运算符中引入多个条件

我想写一条如下的SQL语句:


select * from tbl where col like ('ABC%','XYZ%','PQR%');

我知道可以使用来完成OR。但是我想知道还有没有更好的解决方案。


森栏
浏览 3239回答 3
3回答

炎炎设计

这是另一种方法:select * from tbl where col like 'ABC%'unionselect * from tbl where col like 'XYZ%'unionselect * from tbl where col like 'PQR%';这是验证的测试代码:create table tbl (col varchar(255));insert into tbl (col) values ('ABCDEFG'), ('HIJKLMNO'), ('PQRSTUVW'), ('XYZ');select * from tbl where col like 'ABC%'unionselect * from tbl where col like 'XYZ%'unionselect * from tbl where col like 'PQR%';+----------+| col      |+----------+| ABCDEFG  || XYZ      || PQRSTUVW |+----------+3 rows in set (0.00 sec)

翻过高山走不出你

这是临时表的好用法。CREATE TEMPORARY TABLE patterns (  pattern VARCHAR(20));INSERT INTO patterns VALUES ('ABC%'), ('XYZ%'), ('PQR%');SELECT t.* FROM tbl t JOIN patterns p ON (t.col LIKE p.pattern);在示例模式中,col无法匹配多个模式,因此可以确保tbl结果中最多只能看到每一行。但是,如果您的模式col可以匹配多个模式,则应使用DISTINCT查询修饰符。SELECT DISTINCT t.* FROM tbl t JOIN patterns p ON (t.col LIKE p.pattern);

神不在的星期二

Oracle 10g具有允许在SQL中使用符合POSIX的正则表达式的功能:REGEXP_LIKEREGEXP_REPLACEREGEXP_INSTRREGEXP_SUBSTR有关此函数的语法详细信息,请参见《Oracle数据库SQL参考》。使用示例查看Perl中的正则表达式。代码:    select * from tbl where regexp_like(col, '^(ABC|XYZ|PQR)');
打开App,查看更多内容
随时随地看视频慕课网APP