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

検索結果では、abc123、ABC123、aBc123、ABc123 のレコードも返されます。

誰でも私を助けてもらえますか?

4

3 に答える 3

3

考えられる解決策は次の 2 つです。

初め:

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

2番:

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 値の完全なリストについては、次のマニュアルを参照してください

于 2013-09-24T09:45:31.500 に答える
1

upper または lower 関数を使用して、必要な正確な値を指定します。

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 に答える