Maison >base de données >tutoriel mysql >Comment effectuer des recherches insensibles à la casse dans Oracle ?

Comment effectuer des recherches insensibles à la casse dans Oracle ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-17 11:31:09771parcourir

How to Perform Case-Insensitive Searches in Oracle?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn