如何在 oracle sql 数据库中使 WHERE 子句不区分大小写?
How to make WHERE clause case insensitive in oracle sql database?
select * from table_Name where name ="red"
我需要同时获取 "red" 和 "RED"。
例如:我需要在同一语句中同时使用 upper 和 lower。
我该怎么做?
您可以在会话 '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
上使用索引。根据使用的表达式创建一个基于函数的索引可能是合适的。
select * from table_Name where name ="red"
我需要同时获取 "red" 和 "RED"。
例如:我需要在同一语句中同时使用 upper 和 lower。
我该怎么做?
您可以在会话 '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
上使用索引。根据使用的表达式创建一个基于函数的索引可能是合适的。