在oracle中进行敏感查询搜索

时间:2013-09-24 09:40:17

标签: oracle oracle11g oracle10g

SELECT VALUE FROM BILL WHERE VALUE='ABC123';

搜索结果会带回abc123,ABC123,aBc123,ABc123的记录

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用大写或小写功能,并提供您需要的确切值。

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

如果您需要所有值,例如abc,aBc,Abc等,您可以在where条件下使用以下条件

value in ('abc','aBc','Abc','ABC')

答案 2 :(得分:1)

你应该写:

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

但如果存在,你将失去价值指数的好处。 但是,您可以在upper(value)上创建一个基于函数的索引。

相关问题