web-dev-qa-db-fra.com

Comment comparer des chaînes en ignorant la casse?

Comment écrire une requête dans Oracle en ignorant la casse des chaînes comparées? Par exemple, "ange", "ange", "ange", "ange", "ange" seraient tous égaux en comparaison.

36
wanna be jaj

Si vous correspondez à la valeur totale de l'utilisation du champ

WHERE UPPER(fieldName) = 'ANGEL'

EDIT: De votre commentaire que vous souhaitez utiliser:

SELECT 
    RPAD(a.name, 10,'=') "Nombre del Cliente"
    , RPAD(b.name, 12,'*') "Nombre del Consumidor" 
FROM 
    s_customer a, 
    s_region b 
WHERE 
    a.region_id = b.id 
    AND UPPER(a.name) LIKE '%SPORT%' 
50
Gary.Ray

Vous pouvez utiliser le mot clé UPPER :

SELECT *
FROM Customers
WHERE UPPER(LastName) = UPPER('AnGel')
17
bendewey

Vous pouvez utiliser:

select * from your_table where upper(your_column) like '%ANGEL%'

Sinon, vous pouvez utiliser: 

select * from your_table where upper(your_column) = 'ANGEL'

Ce qui sera plus efficace si vous recherchez une correspondance sans caractères supplémentaires avant ou après le champ your_column , comme l’a suggéré Gary Ray dans ses commentaires.

10
Pablo Santa Cruz

avant de comparer les deux chaînes ou plus, exécutez d'abord les commandes suivantes

alter session set NLS_COMP=LINGUISTIC;
alter session set NLS_SORT=BINARY_CI;

une fois ces deux instructions exécutées, vous pouvez comparer les chaînes et la casse sera respectée. Par exemple, vous aviez deux chaînes s1 = 'Apple' et s2 = 'Apple', si vous souhaitez comparer les deux chaînes avant d'exécuter les instructions ci-dessus ces deux chaînes seront traitées comme deux chaînes différentes, mais si vous comparez les chaînes après l'exécution des deux instructions alter, ces deux chaînes s1 et s2 seront traitées comme la même chaîne.

raisons d'utiliser ces deux déclarations

Nous devons définir NLS_COMP = LINGUISTIC et NLS_SORT = BINARY_CI afin d'utiliser l'insensibilité à la casse 10gR2. Comme ils sont modifiables en session, il ne suffit pas de les définir dans les paramètres d'initialisation. Nous pouvons les définir dans les paramètres d'initialisation, mais ils n'affectent alors que le serveur et pas le côté client.

5
Smart003

Plus de détails sur la réponse de M. Dredel et le commentaire de tuinstoel . Les données de la colonne seront stockées dans son cas spécifique, mais vous pouvez modifier la sensibilité à la casse de votre session pour la mise en correspondance.

Vous pouvez modifier la session ou la base de données pour utiliser une recherche linguistique ou sensible à la casse. Vous pouvez également configurer des index pour qu'ils utilisent des ordres de tri particuliers.

par exemple

ALTER SESSION SET NLS_SORT=BINARY_CI;

Une fois que vous commencez à vous lancer dans des langues autres que l'anglais, avec des accents, etc., il existe une prise en charge supplémentaire de l'insensible aux accents . Certaines fonctionnalités varient en fonction de la version, consultez le document Globablization de votre version d'Oracle. La dernière (11g) est ici

2
Gary Myers

Je ne me souviens pas de la syntaxe exacte, mais vous pouvez définir la colonne de table comme étant sensible à la casse. Mais soyez prudent, car vous ne pourrez plus faire correspondre les cas et si vous VOULEZ «cool» pour ne pas correspondre à «CoOL», cela ne sera plus possible. 

0
Genia S.