为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森栏 2019-10-18 10:13:21
我想写一条如下的SQL语句:select * from tbl where col like ('ABC%','XYZ%','PQR%');我知道可以使用来完成OR。但是我想知道还有没有更好的解决方案。
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

这是另一种方法:


select * from tbl where col like 'ABC%'

union

select * from tbl where col like 'XYZ%'

union

select * 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%'

union

select * from tbl where col like 'XYZ%'

union

select * from tbl where col like 'PQR%';

+----------+

| col      |

+----------+

| ABCDEFG  |

| XYZ      |

| PQRSTUVW |

+----------+

3 rows in set (0.00 sec)


查看完整回答
反对 回复 2019-10-18
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

这是临时表的好用法。


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);


查看完整回答
反对 回复 2019-10-18
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

Oracle 10g具有允许在SQL中使用符合POSIX的正则表达式的功能:


REGEXP_LIKE

REGEXP_REPLACE

REGEXP_INSTR

REGEXP_SUBSTR

有关此函数的语法详细信息,请参见《Oracle数据库SQL参考》。


使用示例查看Perl中的正则表达式。


代码:


    select * from tbl where regexp_like(col, '^(ABC|XYZ|PQR)');


查看完整回答
反对 回复 2019-10-18
  • 3 回答
  • 0 关注
  • 3267 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信