SELECT VALUE FROM BILL WHERE VALUE='ABC123';
検索結果では、abc123、ABC123、aBc123、ABc123 のレコードも返されます。
誰でも私を助けてもらえますか?
考えられる解決策は次の 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 値の完全なリストについては、次のマニュアルを参照してください。
upper または lower 関数を使用して、必要な正確な値を指定します。
select value from bill where upper(value)='ABC123'
abc、aBc、Abcなどのすべての値が必要な場合はwhere
、要件に合わせて以下を使用できます
value in ('abc','aBc','Abc','ABC')
あなたは書くべきです:
SELECT VALUE FROM BILL WHERE upper(VALUE)='ABC123';
ただし、存在する場合は、値のインデックスの利点が失われます。
ただし、upper(value) に基づく関数ベースのインデックスを作成することはできます。