如何在oraclesql数据库中使where子句不区分大小写?

inb24sb2  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(400)
select * from table_Name where name ="red"

我要把“红”和“红”都拿来。
例如:我需要在同一个语句中同时使用upper和lower。
我该怎么做?

q1qsirdb

q1qsirdb1#

您可以在会话中使用不区分大小写的参数 '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–不区分大小写排序和比较

zynd9foi

zynd9foi2#

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

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

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

相关问题