Neden belirli alfabeleri içeren SQL sorgusu sonuçlarından bazıları eksik?

Dec 15 2020

Aşağıdaki tablom var

Aşağıdaki sorguyu çalıştırdığımda, 's' içeren tüm eğitmen adını göstermesi gerekirdi ama göstermiyor. Yazdığım sorgu:

SQL> SELECT instructor_name
  2  FROM instructor
  3  WHERE instructor_name LIKE '%s%';

Sonuç:

Buradaki sorun nedir? Sonuçta Balbir Silakar ve Saurav Pangeni'nin de görünmesi gerekmez mi?

Yanıtlar

1 GMB Dec 15 2020 at 21:47

's've 'S'sütununuzda büyük / küçük harfe duyarlı bir harmanlama varsa, bunlar iki farklı şeydir.

Ne yazık ki Oracle, ürününün büyük / küçük harf duyarlı olmayan bir sürümünü sağlamaz like(genellikle ilikediğer veritabanlarında denir ).

Yapabilirsin:

where instructor_name like '%s%' or instructor_name like '%S%' 

Veya:

where lower(instructor_name) like '%s%' 

Veya kullanabilirsiniz regexp_like(); arama durumunu duyarsız hale getirmek için kullanılabilecek üçüncü bir argüman alır.

where regexp_like(instructor_name, 's', 'i')

Normal ifadenin üçü arasında en hızlı seçenek olmasına şaşırmam.

catfood Dec 15 2020 at 21:39

Veritabanınız (varsayılan olarak sanırım) büyük / küçük harfe duyarlıdır, bu nedenle LIKE eşleştirme mekanizması büyük / küçük harfe duyarlıdır. Bu isimler büyük harf S içeriyor.

Aramanın büyük / küçük harfe duyarlı olmayacağına dair bir Soru-Cevap aşağıda verilmiştir. Büyük / küçük harfe duyarlı bir SQL Server veritabanında Büyük / Küçük Harfe Duyarsız Like sorgusu gerçekleştirin

leftjoin Dec 15 2020 at 21:47

Büyük / küçük harfe duyarlı olmayan denetim için regexp_like kullanın

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

Diğerlerinin de belirttiği gibi, s(chr (115)) ve S(chr (83)) iki farklı şeydir ve s'Balbir Silakar' veya 'Saurav Pangeni'de yoktur.

Oracle 12.2'den kullanabilirsiniz

where instructor_name collate binary_ci like '%s%';

Ayrıca şununla aksanları göz ardı edebilirsiniz:

where instructor_name collate binary_ai like '%s%';