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)
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);
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)');
- 3 回答
- 0 关注
- 3492 浏览
添加回答
举报