Effectuer une recherche sans distinction de casse dans la base de données Oracle
Les opérateurs de comparaison (tels que LIKE, =, etc.) dans la base de données Oracle sont sensibles à la casse par défaut. Cela peut présenter un défi lorsque vous devez rechercher des données sans tenir compte du cas. Pour résoudre ce problème, Oracle propose plusieurs méthodes permettant d'effectuer des recherches insensibles à la casse sans recourir aux index de texte intégral.
Méthode 1 : Conversion de cas
Vous pouvez utiliser la fonction UPPER() ou LOWER() pour forcer toutes les données à être dans la même casse. Par exemple :
<code class="language-sql">select * from my_table where upper(column_1) = upper('my_string');</code>
ou
<code class="language-sql">select * from my_table where lower(column_1) = lower('my_string');</code>
Cela peut nécessiter une analyse complète de la table si column_1
n'est pas indexé sur upper(column_1)
ou lower(column_1)
respectivement. Pour éviter cela, créez un index basé sur des fonctions :
<code class="language-sql">create index my_index on my_table ( lower(column_1) );</code>
Pour l'opérateur LIKE, ajoutez % autour de la chaîne de recherche :
<code class="language-sql">select * from my_table where lower(column_1) LIKE lower('my_string') || '%';</code>
Méthode 2 : Expression régulière
La fonction REGEXP_LIKE() introduite à partir d'Oracle 10g permet une recherche insensible à la casse en spécifiant le paramètre de correspondance 'i' :
<code class="language-sql">select * from my_table where regexp_like(column_1, '^my_string$', 'i');</code>
Pour l'utiliser comme opérateur d'égalité, spécifiez le début et la fin de la chaîne (en utilisant ^ et $) :
<code class="language-sql">select * from my_table where regexp_like(column_1, '^my_string$', 'i');</code>
Pour une recherche équivalente LIKE, supprimez ^ et $. Notez que la chaîne de recherche peut contenir des caractères interprétés différemment par le moteur d'expression régulière.
Méthode 3 : Configuration au niveau de la session
Le paramètre NLS_SORT définit l'ordre de tri des comparaisons, y compris = et LIKE. Vous pouvez activer le tri insensible à la casse pour toutes les requêtes d'une session en le définissant sur BINARY_CI :
<code class="language-sql">alter session set nls_sort=BINARY_CI;</code>
Vous pouvez également définir NLS_COMP sur LINGUISTIC pour forcer la comparaison des langues :
<code class="language-sql">alter session set nls_comp=LINGUISTIC;</code>
Pour améliorer les performances, vous pouvez créer un index de langue :
<code class="language-sql">create index my_linguistc_index on my_table (NLSSORT(column_1, 'NLS_SORT = BINARY_CI'));</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!