正如我在标题中所写,我有SQL查询,在Oracle DB上运行,让我们说:
SELECT * FROM TABLE WHERE TABLE.NAME Like 'IgNoReCaSe'
如果我想,查询将返回“IGNORECASE”,“ignorecase”或它们的组合,如何做到这一点?
这可能吗?
答案 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)
您可以使用upper
或lower
函数将这两个值转换为大写或小写:
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)
也不要忘记显而易见的,表中的数据是否需要有案例?您只能以小写形式插入行(或将现有数据库行转换为小写),并从一开始就完成。