Mengapa beberapa hasil untuk kueri SQL yang berisi abjad tertentu hilang?

Dec 15 2020

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

1 GMB Dec 15 2020 at 21:47

'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 ilikedi 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.

catfood Dec 15 2020 at 21:39

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

leftjoin Dec 15 2020 at 21:47

Untuk pemeriksaan tidak peka huruf besar / kecil, gunakan regexp_like

where regexp_like(instructor_name , 's', 'i');
WilliamRobertson Dec 16 2020 at 05:16

Seperti yang telah disebutkan orang lain, s(chr (115)) dan S(chr (83)) adalah dua hal yang berbeda, dan tidak ada sdi '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%';