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
Libérer: 2025-01-17 11:31:09
original
769 Les gens l'ont consulté

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>
Copier après la connexion

ou

<code class="language-sql">select * from my_table where lower(column_1) = lower('my_string');</code>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal