human
Le comportement par défaut de ```LIKE``` et des autres opérateurs de comparaison, ```=``` etc est sensible à la casse. Est-il possible de les rendre insensibles à la casse
gpt
Il existe 3 principales façons d'effectuer une recherche insensible à la casse dans Oracle sans utiliser d'index de texte intégral.

Au final, la méthode que vous choisissez dépend de vos circonstances individuelles ; la chose principale à retenir est qu'il faut indexer correctement pour une recherche insensible à la casse afin d'améliorer les performances.

1. Mettez en majuscule ou en minuscule votre colonne et votre chaîne de caractères de manière identique.
Vous pouvez forcer toutes vos données à être de la même casse en utilisant `UPPER()` ou `LOWER()` :
```
select * from my_table where upper(column_1) = upper('my_string');
```
ou
```
select * from my_table where lower(column_1) = lower('my_string');
```
Si `column_1` n'est pas indexé sur `upper(column_1)` ou `lower(column_1)`, selon le cas, cela peut entraîner une analyse complète de la table. Pour éviter cela, vous pouvez créer un index basé sur une fonction.
```
create index my_index on my_table ( lower(column_1) );
```
Si vous utilisez LIKE, vous devez concaténer un `%` autour de la chaîne que vous recherchez.
```
select * from my_table where lower(column_1) LIKE lower('my_string') || '%';
```

2. Utilisez des expressions régulières.
À partir d'Oracle 10g, `REGEXP_LIKE()` est disponible. Vous pouvez spécifier le paramètre de correspondance `'i'` pour effectuer une recherche insensible à la casse.

Pour utiliser cela comme un opérateur d'égalité, vous devez spécifier le début et la fin de la chaîne, ce qui est indiqué par le chapeau et le signe dollar.

```
select * from my_table where regexp_like(column_1, '^my_string$', 'i');
```
Pour effectuer l'équivalent de LIKE, ceux-ci peuvent être supprimés.
```
select * from my_table where regexp_like(column_1, 'my_string', 'i');
```
Faites attention car votre chaîne peut contenir des caractères qui seront interprétés différemment par le moteur d'expressions régulières.

3. Modifiez-le au niveau de la session.
Le paramètre NLS_SORT régit la séquence de classement pour l'ordonnancement et les différents opérateurs de comparaison, y compris `=` et LIKE. Vous pouvez spécifier un classement binaire insensible à la casse en modifiant la session. Cela signifie que chaque requête effectuée dans cette session effectuera des comparaisons insensibles à la casse.
```
alter session set nls_sort=BINARY_CI
```
Il existe de nombreuses informations supplémentaires sur le classement linguistique et la recherche de chaînes si vous souhaitez spécifier une langue différente ou effectuer une recherche insensible aux accents en utilisant BINARY_AI.

Vous devrez également modifier le paramètre NLS_COMP ; la valeur par défaut de NLS_COMP est BINARY ; mais LINGUISTIC spécifie qu'Oracle doit tenir compte de la valeur de NLS_SORT.

Donc, une fois de plus, vous devez modifier la session
```
alter session set nls_comp=LINGUISTIC
```
Vous voudrez peut-être créer un index linguistique pour améliorer les performances
```
create index my_linguistc_index on my_table 
   (NLSSORT(column_1, 'NLS_SORT = BINARY_CI'));
```