IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[9.2] Requete sensible aux accents et à la case


Sujet :

Oracle

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut [9.2] Requete sensible aux accents et à la case
    Bonjour,

    J'ai des requetes toute simples qui ressemblent à ça :

    Select MonChamp from MaTable where MonChamp like '%ete%'

    et j'aimerai qu'il fasse une comparaison non sensible aux accents et à la casse et qu'il me ramene tous les enregistrements qui contiennent 'éte' ou 'été' ou 'étE' etc...

    J'ai essayé des trucs du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER SESSION SET NLS_COMP = ANSI;
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER SESSION SET NLS_COMP = ANSI_AI;
    Mais ça ne change pas le résultat.

    Auriez-vous des suggestions ?

    Merci

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    la fonction permettant de mettre en majuscule une chaine de caractére :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select upper ( 'dévèpé') from dual ; 
     
    UPPER(
    ------
    DÉVÈPÉ
    en minuscule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> select lower ( 'dévèpé') from dual ; 
     
    LOWER(
    ------
    dévèpé
    supprimmer les accents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SQL>  select replace ( replace ( 'dévèpé', 'é','e'), 'è','e' ) from dual ; 
     
    REPLAC
    ------
    devepe
    enlever les accents et tout mettre en majuscule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SQL>  select upper (replace ( replace ( 'dévèpé', 'é','e'), 'è','e' )) text from dual ; 
     
    TEXT
    ------
    DEVEPE
     
    SQL>

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Merci Jaouad, mais je recherche une méthode un peu plus générique que ça, mon exemple avec 'ete' n'était qu'un exemple, mais il peut y avoir des accents sur quasiement tout les lettres...

  4. #4
    Membre expert
    Avatar de bouyao
    Inscrit en
    Janvier 2005
    Messages
    1 778
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 778
    Points : 3 033
    Points
    3 033
    Par défaut
    Tu peut utiliser la fonction TRANSLATE

    par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    SQL> select ch from t where ch like '%a';
     
    aucune ligne sÚlectionnÚe
     
    SQL> select ch from t where ch like '%à';
     
    CH
    ----------
    étéolà
     
    SQL> select ch from t where translate(ch,'à','a') like '%a';
     
    CH
    ----------
    étéolà
    par exemple

    tu utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    translate(to_champ,'éèàïù','eeaiu')
    ce qui signifie ici :
    é --> e
    è --> e
    à --> a
    ï --> i
    ù --> u

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Points : 1 046
    Points
    1 046
    Par défaut
    Ah c'est encore un peu artisanale, mais ça me plait mieux . Je vais tester ça, merci ! Si d'autres ont des idées...

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 079
    Points
    8 079
    Par défaut
    Bonjour

    Vous y êtes presque !

    Comme vous pouvez le voir ici, http://www.developpez.net/forums/vie...hlight=nlscomp
    il faut jouer à la fois sur le NLS_COMP et le NLS_SORT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER SESSION SET NLS_COMP=ANSI;
    ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 9
    Points : 9
    Points
    9
    Par défaut Quid de LIKE ?
    Bonjour à tous !

    Cette solution est vraiment efficace lorsque l'on recherche une égalité (SELECT valeurs FROM table WHERE val1 = 'val2').
    Par contre, je l'ai testé avec un LIKE (SELECT valeurs FROM table WHERE val1 LIKE '%val2%') et ca ne fonctionne plus

    Quelqu'un aurait-il une idée sur le sujet ?

    Merci
    kantozor

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/09/2007, 12h57
  2. Réponses: 7
    Dernier message: 26/07/2007, 12h33
  3. Erreur liée aux accents
    Par Mickael49 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/12/2006, 09h34
  4. Méthode find sensible aux cellules fusionnées?
    Par spileo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/09/2006, 02h22
  5. Recherche insensible à la casse ET insensible aux accents.
    Par Bernard Grosdoy dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 10/07/2005, 04h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo