Oracle数据库查询中如何忽略区分大小写
How to ignore case sensitivity in Oracle database query
我有包含大写和小写字符的字符串,如何忽略区分大小写。
我试过 COLLET,UPPERCASE,LOWERCASE
它不工作。
还有其他方法可以忽略吗?
试试这个:
WHERE UPPER(myColumn) = UPPER(myValue)
或者,当然:
WHERE LOWER(myColumn) = LOWER(myValue)
就像 Robert Kock 提到的那样,在两侧使用上层或下层。
如果在使用 upper/lower 后连接不匹配,则可能是由于数据中的尾随空格。
在这种情况下,您还可以使用 trim 删除不需要的尾随空格
upper(trim(column1)) = upper(trim(column2))
或
lower(trim(column1)) = lower(trim(column2))
上层和下层方法都可以,但如果您正在寻找更复杂的方法,请尝试此方法。
create table table_test (a varchar2(100));
insert into table_test values( 'ABC');
insert into table_test values( 'abc');
insert into table_test values( 'AbC');
alter session set NLS_COMP=LINGUISTIC;
-- how to compare string
alter session set NLS_SORT=BINARY_AI; --//or alter session set NLS_SORT=BINARY_CI;
-- how to sort string
-- the magic starts here
select * from table_test where a = 'ABC'
以及对不同排序和比较方法的完整描述:
https://docs.oracle.com/cd/B28359_01/server.111/b28298/ch5lingsort.htm#CIHJBFAD
我有包含大写和小写字符的字符串,如何忽略区分大小写。
我试过 COLLET,UPPERCASE,LOWERCASE 它不工作。 还有其他方法可以忽略吗?
试试这个:
WHERE UPPER(myColumn) = UPPER(myValue)
或者,当然:
WHERE LOWER(myColumn) = LOWER(myValue)
就像 Robert Kock 提到的那样,在两侧使用上层或下层。 如果在使用 upper/lower 后连接不匹配,则可能是由于数据中的尾随空格。 在这种情况下,您还可以使用 trim 删除不需要的尾随空格
upper(trim(column1)) = upper(trim(column2))
或
lower(trim(column1)) = lower(trim(column2))
上层和下层方法都可以,但如果您正在寻找更复杂的方法,请尝试此方法。
create table table_test (a varchar2(100));
insert into table_test values( 'ABC');
insert into table_test values( 'abc');
insert into table_test values( 'AbC');
alter session set NLS_COMP=LINGUISTIC;
-- how to compare string
alter session set NLS_SORT=BINARY_AI; --//or alter session set NLS_SORT=BINARY_CI;
-- how to sort string
-- the magic starts here
select * from table_test where a = 'ABC'
以及对不同排序和比较方法的完整描述: https://docs.oracle.com/cd/B28359_01/server.111/b28298/ch5lingsort.htm#CIHJBFAD