0
SELECT VALUE FROM BILL WHERE VALUE='ABC123';

搜索结果也会带回带有 abc123、ABC123、aBc123、ABc123 的记录

谁能帮帮我吗?

4

3 回答 3

3

两种可能的解决方案:

第一的:

SELECT value 
FROM bill 
WHERE upper(VALUE) = 'ABC123';

第二:

ALTER SESSION SET nls_comp = Linguistic;
ALTER SESSION SET nls_sort = XGerman_CI; -- or any other language, e.g. XWEST_EUROPEAN_CI

SELECT value 
FROM bill 
WHERE VALUE = 'ABC123';

nls_sort 参数的_CI后缀告诉 Oracle 比较“不区分大小写”。

在这两种情况下,Oracle 都不会使用索引,除非您创建基于函数的索引。

有关可能的 NLS_SORT 值的完整列表,请参阅手册:http ://docs.oracle.com/cd/E11882_01/server.112/e10729/applocaledata.htm#i637232

于 2013-09-24T09:45:31.500 回答
1

使用上或下功能并给出您需要的确切值。

select value from bill where upper(value)='ABC123'

如果您需要 abc、aBc、Abc 等所有值,您可以在下面where根据您的要求使用

value in ('abc','aBc','Abc','ABC')
于 2013-09-24T09:42:38.897 回答
1

你应该写:

SELECT VALUE FROM BILL WHERE upper(VALUE)='ABC123';

但是,如果存在,您将失去价值指数的好处。

但是,您可以在 upper(value) 上创建基于函数的索引。

于 2013-09-24T09:43:30.460 回答