SORU
22 Mart 2011, Salı


Davayı Oracle aranıyor duyarsız

Ve diğer karşılaştırma operatörleri, = GİBİ vb varsayılan davranışı büyük / küçük harfe duyarlıdır.

Mümkün onları duyarlı olun.

CEVAP
9 ŞUBAT 2013, CUMARTESİ


3 ana yolu tam metin dizinleri kullanmadan Oracle büyük / küçük harf duyarlı bir arama gerçekleştirmek için vardır.

Sonuçta ne seçerseniz seçin, sizin bireysel koşullara bağlıdır; asıl şey hatırlamak için performansını artırmak için büyük / küçük harf duyarlı arama için doğru dizin.

1. Köşenizi dava ve dize aynı şekilde.

Tüm veri UPPER() LOWER() kullanarak aynı durumda olması için zorlayabilir:

select * from my_table where upper(column_1) = upper('my_string');

ya

select * from my_table where lower(column_1) = lower('my_string');

column_1 upper(column_1) ya uygun olarak lower(column_1), endeksli değil, bu tam bir tablo taraması zorunlu. Bunu önlemek için function-based index bir oluşturabilirsiniz.

create index my_index on my_table ( lower(column_1) );

Eğer dize etrafında % bir arada var GİBİ kullanıyorsanız arıyorsun.

select * from my_table where lower(column_1) = lower('my_string') || '%';

This SQL Fiddle tüm bu sorgular içinde ne olacağını gösterir. Bu dizin kullanıldığında ve değil mi zaman gösterir Planlarını Açıklamak unutmayın.

2. Düzenli ifadeler kullanın.

Oracle 10 g dan itibaren REGEXP_LIKE() mevcuttur. Büyük / küçük harf duyarlı bir arama gerçekleştirmek için _match_parameter_ 'i' belirtebilirsiniz.

Eşitlik operatörü olarak bu kullanmak için karat ve dolar işareti ile gösterilir, string, başlangıç ve bitiş belirtmeniz gerekir.

select * from my_table where regexp_like(column_1, '^my_string$', 'i');

GİBİ eşdeğer gerçekleştirmek için, bu kaldırılabilir.

select * from my_table where regexp_like(column_1, 'my_string', 'i');

Senin dize farklı düzenli ifade motoru tarafından yorumlanacaktır karakterler içerebilir olarak buna dikkat edin.

This SQL Fiddle aynı örnek gösterir REGEXP_LİKE kullanmaktan başka çıkış().

3. Oturum düzeyinde değiştirin.

NLS_SORT parametre GİBİ sipariş ve çeşitli karşılaştırma operatörleri, = dahil ve harmanlama sırasını yönetir. Oturum değiştirerek ikili, büyük / küçük harf duyarlı bir sıralama belirtebilirsiniz. Bu her sorgu oturumda gerçekleştirilen büyük / küçük harf duyarlı parametreleri gerçekleştirmek olacak.

alter session set nls_sort=BINARY_CI

Eğer farklı bir dil belirlemek istiyorsanız linguistic sorting and string searching civarında ek bilgi var, ya da aksan-duyarlı arama kullanarak bir BİNARY_Aİ.

Ayrıca NLS_COMP parametreyi değiştirmek gerekir; alıntı:

Tam operatörler ve sorgu yan tümceleri NLS_SORT parametresi olan itaat NLS_COMP parametrenin değerine bağlıdır. Bir operatör ya da eğer yan NLS_COMP tarafından belirlenen NLS_SORT değeri, itaat etmez harmanlama kullanılan İKİLİ.

NLS_COMP varsayılan değer olan İKİLİ; ama, DİLSEL Oracle NLS_SORT değerine dikkat etmesi gerektiğini belirtir:

Yan ve PL/SQL NEREDE tüm SQL işlemleri için karşılaştırmalar blok dilsel sıralama NLS_SORT belirtilen kullanmalısınız parametre. Performansını artırmak için de tanımlayabilirsiniz bu sütun için istediğiniz dilsel dilsel Endeksi karşılaştırmalar.

Bu yüzden, bir kez daha, oturum değiştirmek gerekir

alter session set nls_comp=LINGUISTIC

linguistic index bir oluşturmak için performansını artırmak için isteyebilirsiniz belgelerinde kaydetti

create index my_linguistc_index on my_table 
   (NLSSORT(column_1, 'NLS_SORT = BINARY_CI'));

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alex maybury

    alex maybury

    20 Aralık 2007
  • Ama Jenna

    Ama Jenna

    29 NİSAN 2011
  • Charles Renaud

    Charles Rena

    10 Kasım 2007