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 :

Clause Where et caracteres spéciaux


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    kum
    kum est déconnecté
    Inactif  
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 27
    Par défaut Clause Where et caracteres spéciaux
    Bonjour,

    Je voudrais que cette clause where fonction

    Select....
    Where prenom='Sébastien'

    Sachant que dans ma base les prénoms sont écrit sans caracteres spéciaux.
    Donc 'Sébastien' est enregistré en 'Sebastien'.

    Alors lorsque je fais Where prenom='Sébastien', la requete ne retourne rien.

    Comment puis-je faire ???

    Merci par avance

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Une solution qui fonctionne en 10g (et probablement en 9i):

    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
    17
    18
    19
    20
     
    dev001> select * from t;
     
    X
    ----------
    été
     
    dev001> ALTER SESSION SET NLS_COMP=ANSI;
     
    Session altered.
     
    dev001> ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;
     
    Session altered.
     
    dev001> select * from t where x='ete';
     
    X
    ----------
    été
    Sinon il y a sans doute un moyen de convertir la colonne et la chaîne de recherche en majuscules dans la clause WHERE de la requête.

  3. #3
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    D'après ce que vous dites, la colonne est stockée sans les accents
    dans ce cas, un convert appliqué à la clause à rechercher devrait faire l'affaire !

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2006
    Messages : 139
    Par défaut pourquoi pas une fonction?
    Bonsoir,

    Une fonction basée appelant convert ou alors
    coder les substitutions de chaque caracteres spéciaux pour l'adapter à des cas tordus

    cdt

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Je ne suis pas sûr que CONVERT appliquée à la clause de recherche résoud le problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dev002> select convert('été', 'WE8MSWIN1252', 'US7ASCII') col from dual;
     
    COL
    ---
    ¿t¿
    En revanche, avec Oracle 10, j'ai retravaillé mon exemple et il y a plusieurs solutions possibles avec NLS_COMP et NLS_SORT:


    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    dev002>
    dev002> select * from v$version;
     
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod
    PL/SQL Release 10.2.0.2.0 - Production
    CORE    10.2.0.2.0      Production
    TNS for 32-bit Windows: Version 10.2.0.2.0 - Production
    NLSRTL Version 10.2.0.2.0 - Production
     
    dev002> select * from nls_database_parameters;
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CHARACTERSET               WE8MSWIN1252
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              AMERICAN
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH.MI.SSXFF AM
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY              $
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSE
    NLS_NCHAR_CHARACTERSET         AL16UTF16
    NLS_RDBMS_VERSION              10.2.0.2.0
     
    20 rows selected.
     
    dev002> select * from nls_session_parameters;
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_LANGUAGE                   AMERICAN
    NLS_TERRITORY                  AMERICA
    NLS_CURRENCY                   $
    NLS_ISO_CURRENCY               AMERICA
    NLS_NUMERIC_CHARACTERS         .,
    NLS_CALENDAR                   GREGORIAN
    NLS_DATE_FORMAT                DD-MON-RR
    NLS_DATE_LANGUAGE              AMERICAN
    NLS_SORT                       BINARY
    NLS_TIME_FORMAT                HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
     
    PARAMETER                      VALUE
    ------------------------------ ----------------------------------------
    NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY              $
    NLS_COMP                       BINARY
    NLS_LENGTH_SEMANTICS           BYTE
    NLS_NCHAR_CONV_EXCP            FALSE
     
    17 rows selected.
     
    dev002> drop table t;
     
    Table dropped.
     
    dev002> create table t (x varchar2(20));
     
    Table created.
     
    dev002> insert into t values ('été');
     
    1 row created.
     
    dev002> insert into t values ('ete');
     
    1 row created.
     
    dev002> insert into t values ('ETE');
     
    1 row created.
     
    dev002> commit;
     
    Commit complete.
     
    dev002>
    dev002> select * from t
      2  where nlssort(x, 'NLS_SORT=generic_m_ai')
      3   = nlssort('ete','NLS_SORT=generic_m_ai');
     
    X
    --------------------
    été
    ete
    ETE
     
    dev002> select * from t
      2  where nlssort(x, 'NLS_SORT=french_m_ai')
      3   = nlssort('ete','NLS_SORT=french_m_ai');
     
    X
    --------------------
    été
    ete
    ETE
     
    dev002> select * from t
      2  where nlssort(x, 'NLS_SORT=generic_baseletter')
      3   = nlssort('ete','NLS_SORT=generic_baseletter');
     
    X
    --------------------
    été
    ete
    ETE
     
    dev002>
    dev002> alter session set nls_comp=ansi;
     
    Session altered.
     
    dev002> alter session set nls_sort=generic_baseletter;
     
    Session altered.
     
    dev002> select * from t where x = 'été';
     
    X
    --------------------
    été
    ete
    ETE
     
    dev002> select * from t where x = 'ete';
     
    X
    --------------------
    été
    ete
    ETE
     
    dev002> alter session set nls_comp=ansi;
     
    Session altered.
     
    dev002> alter session set nls_sort=generic_m_ai;
     
    Session altered.
     
    dev002> select * from t where x = 'été';
     
    X
    --------------------
    été
    ete
    ETE
     
    dev002> select * from t where x = 'ete';
     
    X
    --------------------
    été
    ete
    ETE
     
    dev002> alter session set nls_comp=ansi;
     
    Session altered.
     
    dev002> alter session set nls_sort=binary_ai;
     
    Session altered.
     
    dev002> select * from t where x = 'été';
     
    X
    --------------------
    été
    ete
    ETE
     
    dev002> select * from t where x = 'ete';
     
    X
    --------------------
    été
    ete
    ETE

  6. #6
    kum
    kum est déconnecté
    Inactif  
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 27
    Par défaut
    Merci bien.

    J'ai opté pour la solution de pifor qui fonction a merveille.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ajout d'une chaine de caracteres dans la clause where
    Par mambe74 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 19/07/2007, 16h43
  2. [MySQL] Clause WHERE sur une liste et jeu de caractère
    Par napz dans le forum Langage SQL
    Réponses: 5
    Dernier message: 11/10/2006, 13h03
  3. Problème clause WHERE
    Par Invité dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/06/2004, 15h07
  4. probleme avec le caractere 'Z' dans ma clause WHERE
    Par dibox dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/04/2004, 12h21
  5. [ character en simple cote ] clause Where
    Par hocinema dans le forum DB2
    Réponses: 3
    Dernier message: 20/02/2004, 10h17

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