select * from tbl where col like ('ABC%','XYZ%','PQR%');
我知道可以使用来完成OR。但是我想知道还有没有更好的解决方案。
森栏
浏览 3494回答 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)');