Oracle DB:如何编写查询忽略大小写?

时间:2009-06-23 10:51:31

标签: sql database oracle

正如我在标题中所写,我有SQL查询,在Oracle DB上运行,让我们说:

SELECT * FROM TABLE WHERE TABLE.NAME Like 'IgNoReCaSe'

如果我想,查询将返回“IGNORECASE”,“ignorecase”或它们的组合,如何做到这一点?

这可能吗?

9 个答案:

答案 0 :(得分:112)

Select * from table where upper(table.name) like upper('IgNoreCaSe');

或者,将lower替换为upper。

答案 1 :(得分:35)

您可以使用ALTER SESSION语句将比较设置为不区分大小写。请参阅this FAQ

alter session set NLS_COMP=ANSI;
alter session set NLS_SORT=BINARY_CI;

对于所有在此原始答案被接受后8年访问的人(10gR2):

在10gR2之后,NLS_COMP设置必须是“LINGUISTIC”:

ALTER SESSION SET NLS_COMP=LINGUISTIC;

答案 2 :(得分:28)

您可以在where条件的两侧使用lower或upper函数

答案 3 :(得分:11)

您也可以使用正则表达式:

SELECT * FROM TABLE WHERE REGEXP_LIKE (TABLE.NAME,'IgNoReCaSe','i');

答案 4 :(得分:7)

您可以在查询中使用upper()函数,为了提高性能,您可以使用基于函数的索引

 CREATE INDEX upper_index_name ON table(upper(name))

答案 5 :(得分:4)

您可以使用upperlower函数将这两个值转换为大写或小写:

Select * from table where upper(table.name) like upper('IgNoreCaSe') or lower(table.name) like lower('IgNoreCaSe');

答案 6 :(得分:3)

...也可以转换到查询外部的上部或下部:

tableName:= UPPER(someValue || '%');

...

Select * from table where upper(table.name) like tableName 

答案 7 :(得分:2)

在 12.2 及更高版本中,使查询不区分大小写的最简单方法是:

SELECT * FROM TABLE WHERE TABLE.NAME COLLATE BINARY_CI Like 'IgNoReCaSe'

答案 8 :(得分:0)

也不要忘记显而易见的,表中的数据是否需要有案例?您只能以小写形式插入行(或将现有数据库行转换为小写),并从一开始就完成。