web-dev-qa-db-fra.com

Oracle DB: Comment puis-je écrire une requête en ignorant le cas?

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 "IGNORECASE", "ignorecase" ou une combinaison de ces éléments, comment peut-on y parvenir?

Est-ce possible?

48
zeroDivisible

Vous pouvez utiliser les instructions ALTER SESSION pour définir la comparaison comme étant insensible à la casse. Voir this FAQ .

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

Pour tous ceux qui visitent 8 ans après que 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;
33
devio
Select * from table where upper(table.name) like upper('IgNoreCaSe');

Alternativement, remplacez inférieur par supérieur.

109
Hooloovoo

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

28
joe

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

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

Vous pouvez utiliser la fonction upper () dans votre requête et pour augmenter les performances, utilisez un index basé sur les fonctions

 CREATE INDEX upper_index_name ON table(upper(name))
7
akf

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');
4
user3666177

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

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

...

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

N'oubliez pas non plus l'évidence suivante: les données dans les tableaux doivent-elles avoir une casse? Vous ne pouvez insérer que des lignes déjà en minuscule (ou convertir les lignes existantes de la base de données en minuscule) et le faire dès le début.

0
Gandalf