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


select * from table_Name where name ="red"

我需要同时获取"红色"和"红色"。

例如:我需要在同一语句中同时使用大写下部

我该怎么做?

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

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

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

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

最新更新