Oracle:混合IN和LIKE,有可能吗?

问题描述:

是否可以这样做?Oracle:混合IN和LIKE,有可能吗?

即,

IN( '%1', '%2')

的数值并非少数

你会如何解决这个任务?

+0

您从哪里获取值? – 2013-02-20 11:14:40

如果只有几个,只是or将它们结合起来:

column like '%1' or column like '%2' or... 

如果你有很多,你可以创建一个模式的表格,并加入到它。

create table matches (
    match char(10) 
); 

insert into matches values 
    ('%1'),('%2'),...; 

select * from table 
    inner join matches on table.column like matches.match; 

这有重复的行一些问题,如果单行匹配多个模式,但你可以根据你想要什么样的最终输出的修改。

作为第三种选择,你可以使用substr()而不是like如果他们都是一样的长度:

select * from table where substr(column,-1,1) in ('1','2',...) 

此检查的最后一个字符是值的集合。

+0

你可以用临时表做你的例子吗? – Revious 2013-02-20 11:13:34

+0

@ Gik25,当然可以。不过,我不是Oracle用户。你为什么不尝试一下呢? – 2013-02-20 11:14:27

+0

我不太好,但我会尝试。谢谢 – Revious 2013-02-20 11:47:38

如何使用像自己?

Column LIKE '%1' OR Column LIKE '%2' 

您也可以使用REGEXP_LIKE而不是LIKE。在这种情况下它可以更灵活。

要获得与“1”或“2”结束一切只是使用:

SELECT * FROM table_name WHERE REGEXP_LIKE(col_name, '[12]$') 

的[12]意味着匹配1或2 $表示匹配字符串的结尾。

如果你需要的东西像这样:

LIKE '%1' OR LIKE '%2' or LIKE '%A' or LIKE '%W' 

...你只需要在方括号内添加其他字符:

SELECT * FROM table_name WHERE REGEXP_LIKE(col_name, '[12AW]$') 

或者,如果你想什么以数字结尾,你可以使用这个:

SELECT * FROM table_name WHERE REGEXP_LIKE(col_name, '[[:digit:]]$' 

基本上与其他示例相同,但最接近您的示例:

SELECT deptno, empno, ename FROM scott.emp 
WHERE job IN 
    (SELECT job FROM scott.emp WHERE job Like ('SALE%') OR job Like ('MANAG%')) 
/