【问题标题】:IN with LIKE Condition in SQL [duplicate]SQL中带有LIKE条件的IN [重复]
【发布时间】:2014-02-15 08:36:41
【问题描述】:

是否可以在 IN 中使用 LIKE?以下查询产生错误。

    Select * 
    from employees
    where salary between 2500 and 10000
    and job_id NOT in (like '%MAN%', like '%CLERK%');

什么是正确的语法?我正在使用 Oracle 11g

【问题讨论】:

  • 这个 in like 东西是我想要很多次的功能。 Oracle 没有这样的东西。
  • @RenéNyffenegger:我不认为任何数据库都有这样的东西。
  • @a_horse_with_no_name:Teradata 支持 LIKE ALL|ANY ('%MAN%','%CLERK%')。 ALL -> ANDed LIKEs,ANY -> ORed LIKEs,您甚至可以使用 SELECT 来获取搜索字符串
  • @dnoeth:感谢您提供的信息。真是一个有用的功能。
  • @dnoeth PostgreSQL 具有与数组类似的功能:LIKE ANY ARRAY ('%MAN%', %CLERK%')

标签: sql oracle


【解决方案1】:

当时你不能同时“喜欢”和“喜欢”,但你可以这样做

    Select * 
      from employees
     where salary between 2500 
       and 10000
       and job_id NOT like '%MAN%' 
       and job_id NOT like '%CLERK%';

【讨论】:

  • 这是我在收到我提到的查询错误后所做的。谢谢
【解决方案2】:

不幸的是,没有“in like”运算符。您可以将其分解为一系列 @Elfentech 建议的 LIKE 条件,或者您可以使用 REGEXP_LIKE 函数来模拟它:

SELECT *
FROM   employees
WHERE  salary BETWEEN 2500 AND 10000
AND    NOT REGEXP_LIKE (job_id, '.*[MAN|CLERK].*')

或者,您可以加入来自dual 的一堆UNION ALL 查询:

SELECT *
FROM  employees
JOIN  (SELECT 'MAN' AS search FROM dual 
       UNION ALL
       SELECT 'CLERK' FROM dual) jobs 
ON    employee.jod_id LIKE CONCAT ('%', jobs.search, '%')
WHERE salary BETWEEN 2500 AND 10000

【讨论】:

  • 感谢REGEXP_LIKE
猜你喜欢
  • 2020-07-03
  • 2017-08-10
  • 1970-01-01
  • 2012-08-28
  • 2010-09-23
  • 2010-12-24
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
相关资源
最近更新 更多