使用Lower / Upper函数中的多个参数进行比较

时间:2016-01-05 12:12:46

标签: sql oracle

我正在尝试实现如下所示的查询

        SELECT *
        FROM   emp
        WHERE  LOWER (ename) IN LOWER ('A', 'b', 'C', 'd','eF','GG','Hh');

但是收到错误

 ORA-00909: invalid number of arguments.

是否有任何特定的功能可以比较具有小写的'IN'子句中的多个参数?

3 个答案:

答案 0 :(得分:4)

@Muhammad Muazzam说得对,但如果出于某种原因你真的需要在右侧使用LOWER来获得值列表,那么你可以这样做:

select ename from emp
where lower(ename) in 
(select lower(column_value) 
 from   table(SYS.KU$_VCNT('A','B','C','D'))
);

SYS.KU$_VCNT是VARCHAR2(4000)类型的表,它应该已存在于您的数据库中。

答案 1 :(得分:2)

将查询更改为:

SELECT *
        FROM   emp
        WHERE  LOWER (ename) IN ('a', 'b', 'c', 'd');

答案 2 :(得分:1)

我建议你这样说出这样的问题:

    SELECT *
    FROM emp
    WHERE ename IN ('A', 'B', 'C', 'D', 'a', 'b', 'c', 'd');

这允许Oracle在ename上使用索引。注意:Oracle确实允许对表达式建立索引,因此您可以在lower(ename)上建立索引并使用:

    SELECT *
    FROM emp
    WHERE ename IN (lower('A'), lower('B'), lower('C'), lower('D'));