Neden belirli alfabeleri içeren SQL sorgusu sonuçlarından bazıları eksik?
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
'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 ilike
diğ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.
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
Büyük / küçük harfe duyarlı olmayan denetim için regexp_like kullanın
where regexp_like(instructor_name , 's', 'i');
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%';