Oracle DB: Comment puis-je écrire des requêtes en ignorant la casse?

Comme je l’avais écrit dans le titre, j’ai une requête SQL, exécutée sur Oracle DB, disons:

SELECT * FROM TABLE WHERE TABLE.NAME Like 'IgNoReCaSe' 

Si je souhaite que la requête renvoie soit “IGNORECASE”, “ignorecase” ou des combinaisons de celles-ci, comment cela peut-il être fait?

Est-ce possible?

Vous pouvez utiliser les instructions ALTER SESSION pour définir la comparaison en fonction de la casse. Voir cette FAQ .

 alter session set NLS_COMP=ANSI; alter session set NLS_SORT=BINARY_CI; 

Pour toutes les visites de 8 ans après cette réponse originale a été acceptée (pour 10gR2):

Après 10gR2, le paramètre NLS_COMP doit être “LINGUISTIC”:

 ALTER SESSION SET NLS_COMP=LINGUISTIC; 
 Select * from table where upper(table.name) like upper('IgNoreCaSe'); 

Alternativement, substituer plus bas pour supérieur.

Vous pouvez utiliser la fonction inférieure ou supérieure des deux côtés de la condition

Vous pouvez également utiliser des expressions régulières:

 SELECT * FROM TABLE WHERE REGEXP_LIKE (TABLE.NAME,'IgNoReCaSe','i'); 

Vous pouvez utiliser la fonction upper () dans votre requête et, pour améliorer les performances, vous pouvez utiliser un index de base de fonction

  CREATE INDEX upper_index_name ON table(upper(name)) 

… effectue également la conversion en haut ou en bas de la requête:

 tableName:= UPPER(someValue || '%'); 

 Select * from table where upper(table.name) like tableName 

Vous pouvez convertir les deux valeurs en majuscules ou minuscules à l’aide des fonctions upper ou lower :

 Select * from table where upper(table.name) like upper('IgNoreCaSe') or lower(table.name) like lower('IgNoreCaSe'); 

N’oubliez pas non plus l’évidence, les données dans les tableaux doivent-elles avoir un cas? Vous pouvez uniquement insérer des lignes déjà en minuscules (ou convertir les lignes de firebase database existantes en minuscules) et les utiliser dès le début.