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?
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;
Select * from table where upper(table.name) like upper('IgNoreCaSe');
Alternativement, remplacez inférieur par supérieur.
Vous pouvez utiliser la fonction inférieure ou supérieure des deux côtés de la condition où
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 augmenter les performances, utilisez un index basé sur les fonctions
CREATE INDEX upper_index_name ON table(upper(name))
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');
... 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
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.