Mengapa beberapa hasil untuk kueri SQL yang berisi abjad tertentu hilang?
Saya memiliki tabel berikut

Ketika saya menjalankan query berikut, itu seharusnya menunjukkan semua nama instruktur yang mengandung 's' tetapi tidak. Kueri yang saya tulis:
SQL> SELECT instructor_name
2 FROM instructor
3 WHERE instructor_name LIKE '%s%';
Hasilnya adalah:

Apa masalah yang terjadi di sini? Bukankah Balbir Silakar dan Saurav Pangeni juga harus ikut tampil?
Jawaban
's'
dan 'S'
merupakan dua hal yang berbeda jika kolom Anda memiliki susunan case-sensitive.
Sayangnya, Oracle tidak menyediakan versi case-insensitive like
(biasanya disebut ilike
di database lain).
Anda bisa melakukan:
where instructor_name like '%s%' or instructor_name like '%S%'
Atau:
where lower(instructor_name) like '%s%'
Atau, Anda bisa menggunakan regexp_like()
; dibutuhkan argumen ketiga yang dapat digunakan untuk membuat kasus penelusuran tidak peka huruf besar / kecil.
where regexp_like(instructor_name, 's', 'i')
Saya tidak akan terkejut bahwa regex akan menjadi opsi tercepat dari ketiganya.
Database Anda (secara default menurut saya) peka huruf besar / kecil, sehingga mekanisme pencocokan LIKE peka huruf besar / kecil. Nama-nama itu mengandung huruf besar S.
Berikut adalah Tanya Jawab tentang cara membuat penelusuran tidak peka huruf besar / kecil. Lakukan kueri Suka huruf besar / kecil di database SQL Server yang peka huruf besar / kecil
Untuk pemeriksaan tidak peka huruf besar / kecil, gunakan regexp_like
where regexp_like(instructor_name , 's', 'i');
Seperti yang telah disebutkan orang lain, s
(chr (115)) dan S
(chr (83)) adalah dua hal yang berbeda, dan tidak ada s
di 'Balbir Silakar' atau 'Saurav Pangeni'.
Dari Oracle 12.2 Anda dapat menggunakan
where instructor_name collate binary_ci like '%s%';
Anda juga bisa mengabaikan aksen dengan
where instructor_name collate binary_ai like '%s%';