【问题标题】:Oracle: Mixing IN and LIKE, is it possible? [duplicate]Oracle:混合IN和LIKE,可以吗? [复制]
【发布时间】:2013-02-21 05:39:50
【问题描述】:

有可能做这样的事情吗?

即。

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

价值不少

你会如何解决这个任务?

【问题讨论】:

  • 你从哪里得到值?

标签: sql oracle


【解决方案1】:

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

【讨论】:

    【解决方案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',...)
    

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

    【讨论】:

    • 你能用临时表做你的例子吗?
    • @Gik25,这是可能的。不过,我不是 Oracle 用户。你为什么不自己试试呢?
    • 我不是很好,但我会努力的。谢谢
    【解决方案3】:

    使用like 本身怎么样?

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-06-17
        • 2011-03-14
        • 2015-12-06
        • 2012-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-24
        • 1970-01-01
        相关资源
        最近更新 更多