如何在 oracle sql 数据库中使 WHERE 子句不区分大小写?

How to make WHERE clause case insensitive in oracle sql database?

select * from table_Name where name ="red"

我需要同时获取 "red" 和 "RED"。

例如:我需要在同一语句中同时使用 upperlower

我该怎么做?

您可以在会话 'NLS_SORT=BINARY_CI' 中使用 不区分大小写的 参数。会话级别有两个参数:

  • NLS_COMP
  • NLS_SORT

让我们看一个演示:

正常情况:

SQL> with names as
    (
     select 'Vishnu' name from dual
    )
    -- Your query starts here
    select * from names where name='vIsHnU';

no rows selected

不区分大小写的方法:

SQL> alter session set nls_comp='LINGUISTIC';

Session altered

SQL> alter session set nls_sort='BINARY_CI';

Session altered

SQL> with names as
    (
     select 'Vishnu' name from dual
    )
    -- Your query starts here
    select * from names where name='vIsHnU';

NAME  
------
Vishnu

再举一个例子:

SQL> with names as
    (
     select 'red' name from dual union all
     select 'RED' from dual
    )
    -- Your query starts here
    select * from names where name='rEd';

NAME
----
red
RED

提高性能,您还可以创建不区分大小写 INDEX

例如:

create index names_ci_indx on names(NLSSORT(name,'NLS_SORT=BINARY_CI'));

现在,有一些方法可以提高上述事务的性能。请阅读Oracle – Case Insensitive Sorts & Compares

select * from table_Name where lower(name) ="red"

select * from table_Name where upper(name) ="RED"

这不能在 name 上使用索引。根据使用的表达式创建一个基于函数的索引可能是合适的。