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 :

tri alpha numérique


Sujet :

Oracle

  1. #1
    Nouveau candidat au Club
    Inscrit en
    Août 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1
    Par défaut tri alpha numérique
    Existe-t-il une différence entre order by et les tests > ou < ?


    Ce qui m'arrive en pratique :

    J'ai des codes alpha-numériques :
    1-20a
    1-202
    1-205
    1-208


    Je fais un traitement sur chacun d'eux.
    Comme le traitement est récursif, il se peut très bien que la liste se trouve écrasée par d'autres données
    L'ojectif est de traiter tous les codes par ordre croissant.


    Ma requête "prochain_code_à_traiter" est donc du style
    Select codes from ….. Where … and code > code_precedent order by code.
    Et c'est là que c'est drôle !!


    Si le order by m'avait trouver la liste ci-dessus au tour n
    Au tour suivant je chercherai donc les code > '1-20a' et il va me dire 'no rows' !!! Par contre code < '1-20a' va ressortir tous les autres...


    Caroline

  2. #2
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Il y a en effet un paramètre qui te défini les règle de tri et un qui te défini les règle de comparaison (en particulier qui permet de savoir si les alpha sont "inférieurs" ou "supérieurs" au numériques).

    NLS_COMP: comparaison
    NLS_SORT: tri

    tu dois être dans une situation ou ils sont contradictoires....

  3. #3
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Et pour le vérifier, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from v$nls_parameters where parameter= 'NLS_COMP';
    select * from v$nls_parameters where parameter= 'NLS_SORT';

  4. #4
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    précision aprés avoir consulté le doc:

    http://download-uk.oracle.com/docs/c.../ch3.htm#51219

    En fait pour que ta comparaison suive le NLS_SORT il faut définir définir NLS_COMP à "ANSI"

    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
     
    create table T as (select 'AA' as C from dual union all select '11' from dual)
    Table created
     
    alter session set NLS_COMP = BINARY
    Session altered
     
    alter session set NLS_SORT = FRENCH
    Session altered
     
    select * from T order by C
    C 
    --
    AA
    11
    2 rows selected
     
     
    select count(*) from T where C > 'AA'
      COUNT(*)
    ----------
             0
    1 row selected
     
     
    alter session set NLS_SORT = BINARY
    Session altered
     
    select * from T order by C
    C 
    --
    11
    AA
    2 rows selected
     
     
    select count(*) from T where C > 'AA'
      COUNT(*)
    ----------
             0
    1 row selected
     
     
    alter session set NLS_COMP = ANSI
    Session altered
     
    alter session set NLS_SORT = FRENCH
    Session altered
     
    select count(*) from T where C > 'AA'
      COUNT(*)
    ----------
             1
    1 row selected
     
     
    alter session set NLS_SORT = BINARY
    Session altered
     
    select count(*) from T where C > 'AA'
      COUNT(*)
    ----------
             0
    1 row selected
     
    drop table T
    Table dropped

Discussions similaires

  1. NLS_COMP + tri alpha numérique
    Par bruno_nono dans le forum Oracle
    Réponses: 5
    Dernier message: 18/06/2011, 21h42
  2. Tri alpha numérique des combobox
    Par fisio dans le forum VBA Access
    Réponses: 5
    Dernier message: 09/06/2009, 06h25
  3. Tri de données alpha-numériques
    Par TaleMaker dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/10/2008, 18h18
  4. Tranches Alpha-Numérique
    Par jeanchcom dans le forum Access
    Réponses: 2
    Dernier message: 04/01/2007, 09h03

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