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

时间:2013-02-20 11:02:21

标签: sql oracle

是否可以做这样的事情?

IE中。

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

值不是很少

你将如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

您也可以使用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:]]$'

答案 1 :(得分:2)

如果您只有几个,只需将它们与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',...)

检查最后一个字符是否在值集合中。

答案 2 :(得分:0)

如何自己使用?

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

答案 3 :(得分:-1)

基本上与其他人的例子相同,但最接近你的例子:

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