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

SQL Oracle Discussion :

[Order by] Le tri ne tient pas compte de '*'


Sujet :

SQL Oracle

  1. #1
    Yoh
    Yoh est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 46
    Points
    46
    Par défaut [Order by] Le tri ne tient pas compte de '*'
    Bonsoir,

    Bien que cette question soit relative au langage SQL, je la pose dans le forum Oracle car je me demande si cette abération n'est pas liée à Oracle.

    Sur un order by asc d'une requete qui me ramène les valeurs
    'AAA', 'BBBB', 'EEEEE', '*CCCC'

    le résultat du tri donne :
    'AAA', 'BBBB', '*CCCC', 'EEEEE'

    Le order by ne tient pas compte du caractère '*'.
    Idem en remplaçant l'étoile par '%', ...

    Si vous avez des infos là-dessus, je suis preneur car c'est un peu gênant.

    Merci pour vos réponses.

  2. #2
    Membre habitué Avatar de alexmorel
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2003
    Messages : 196
    Points : 157
    Points
    157
    Par défaut t as tester
    essai de mettre tout en parenthèse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    order by ('AAA'), ('BBBB'), ('EEEEE'), ('%CCCC');

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    merci de nous donner le code (c'est toujours plus facile)

    % et _ sont des "wildcard" utilisé avec l'opérateur LIKE / NOT LIKE

    si ta colonne contien "en dur" une *, %, _ ou n'importe quel autre sigle, et bien le tri effectué par l'order by sera conforma aux règles de ton character set

    cela me semble logique

  4. #4
    Yoh
    Yoh est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Marc Musette
    merci de nous donner le code (c'est toujours plus facile)

    % et _ sont des "wildcard" utilisé avec l'opérateur LIKE / NOT LIKE

    si ta colonne contien "en dur" une *, %, _ ou n'importe quel autre sigle, et bien le tri effectué par l'order by sera conforma aux règles de ton character set

    cela me semble logique
    Le code est tout simple.
    Sur une table qui contient le champ "NATACTIVITE" (VARCHAR2(50)), j'exécute la requête : Select natactivite from matable order by natactivite

    Sachant que dans le champ natactivite il y a des valeurs similaire à mon exemple du 1er post et que le résultat me donne cette bizarrerie.
    Il me semble que ça a un rapport à une config. dans le init.ora sur la façon dont il exécute ses tris, mais je ne vois pas quoi.

    (je suis en version 8.1.7)

  5. #5
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    l'ordre de l'order by est déterminé , comme je viens de te le dire, par ton character set ...

    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
     
    SQL> select * from t1;
     
    C1
    ----------
    a
    b
    c
    d
    *
    %
     
    6 rows selected.
     
    SQL> select * from t1 order by c1;
     
    C1
    ----------
    %
    *
    a
    b
    c
    d
     
    6 rows selected.
    ça a l'air de fonctionner chez moi

  6. #6
    Membre à l'essai
    Profil pro
    RSI
    Inscrit en
    Août 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : RSI

    Informations forums :
    Inscription : Août 2002
    Messages : 9
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    La façon d'effectuer le tri est déterminée par le paramètre NLS_SORT,

    Pour avoir un tri binaire sur les données il faut donc modifier ce paramètre soit dans le init.ora soit dans la session.

    Il faut faire dans la session avant le lancement du select :

    ALTER SESSION SET NLS_SORT=BINARY;

    et vous aurez un résultat conforme au code binaire des caractères

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    493
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 493
    Points : 605
    Points
    605
    Par défaut
    effectivement

    et ce paramètre découle (par défaut) du para NLS_LANG , pas réellement du character set comme j'ai pu le dire confusément

  8. #8
    Yoh
    Yoh est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par psalgueiro
    ALTER SESSION SET NLS_SORT=BINARY
    Merci pour vos réponses, apparement ça vient de là.

  9. #9
    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
    Et vous aviez une raison spéciale pour utiliser un ordre de tri autre que binaire ?
    Car une des conséquences, c'est que les index éventuels sur les colonnes de type caractères ne peuvent pas être utilisés...

  10. #10
    Yoh
    Yoh est déconnecté
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 57
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par Pomalaix
    Et vous aviez une raison spéciale pour utiliser un ordre de tri autre que binaire ?
    Car une des conséquences, c'est que les index éventuels sur les colonnes de type caractères ne peuvent pas être utilisés...
    Non, pas de raison spéciale, c'était la configuration par défaut vu que ce paramètre n'a jamais été modifié.

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

Discussions similaires

  1. Datagrid: l'évènement RowCommand ne tient pas compte du tri
    Par GreatDeveloperOnizuka dans le forum ASP.NET
    Réponses: 1
    Dernier message: 16/11/2011, 07h11
  2. Réponses: 6
    Dernier message: 06/09/2009, 15h03
  3. [MySQL] le mot de passe ne tient pas compte des majuscules
    Par jeanfi77 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/03/2007, 17h17

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