Lakukan carian tidak peka huruf besar-kecil dalam pangkalan data Oracle
Operator perbandingan (seperti SUKA, =, dsb.) dalam pangkalan data Oracle adalah sensitif huruf besar secara lalai. Ini boleh menimbulkan cabaran apabila anda perlu mencari data tanpa mengambil kira kes. Untuk menyelesaikan masalah ini, Oracle menyediakan beberapa cara untuk melakukan carian tidak peka huruf besar-kecil tanpa bergantung pada indeks teks penuh.
Kaedah 1: Penukaran kes
Anda boleh menggunakan fungsi UPPER() atau LOWER() untuk memaksa semua data berada dalam kes yang sama. Contohnya:
<code class="language-sql">select * from my_table where upper(column_1) = upper('my_string');</code>
atau
<code class="language-sql">select * from my_table where lower(column_1) = lower('my_string');</code>
Ini mungkin memerlukan imbasan jadual penuh jika column_1
tidak diindeks pada upper(column_1)
atau lower(column_1)
masing-masing. Untuk mengelakkan ini, buat indeks berasaskan fungsi:
<code class="language-sql">create index my_index on my_table ( lower(column_1) );</code>
Untuk operator LIKE, tambahkan % di sekeliling rentetan carian:
<code class="language-sql">select * from my_table where lower(column_1) LIKE lower('my_string') || '%';</code>
Kaedah 2: Ekspresi biasa
Fungsi REGEXP_LIKE() yang diperkenalkan bermula dengan Oracle 10g menyediakan carian tidak peka huruf besar-kecil dengan menyatakan parameter padanan 'i':
<code class="language-sql">select * from my_table where regexp_like(column_1, '^my_string$', 'i');</code>
Untuk menggunakan ini sebagai pengendali kesaksamaan, nyatakan permulaan dan penghujung rentetan (menggunakan ^ dan $):
<code class="language-sql">select * from my_table where regexp_like(column_1, '^my_string$', 'i');</code>
Untuk carian setara LIKE, alih keluar ^ dan $. Ambil perhatian bahawa rentetan carian mungkin mengandungi aksara yang ditafsirkan secara berbeza oleh enjin ungkapan biasa.
Kaedah 3: Konfigurasi peringkat sesi
Parameter NLS_SORT mentakrifkan susunan perbandingan perbandingan, termasuk = dan SUKA. Anda boleh mendayakan pengisihan tidak peka huruf besar-kecil untuk semua pertanyaan dalam sesi dengan menetapkannya kepada BINARY_CI:
<code class="language-sql">alter session set nls_sort=BINARY_CI;</code>
Anda juga mungkin mahu menetapkan NLS_COMP kepada LINGUISTIC untuk memaksa perbandingan bahasa:
<code class="language-sql">alter session set nls_comp=LINGUISTIC;</code>
Untuk meningkatkan prestasi, anda boleh mencipta indeks bahasa:
<code class="language-sql">create index my_linguistc_index on my_table (NLSSORT(column_1, 'NLS_SORT = BINARY_CI'));</code>
Atas ialah kandungan terperinci Bagaimana untuk Melakukan Carian Tidak Peka Huruf dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!