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 :

Option de tri pour ORDER BY


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Points : 56
    Points
    56
    Par défaut Option de tri pour ORDER BY
    Bonjour,
    lorsque je trie une liste avec des caractères spéciaux, ceux-ci sont placés en 1er.
    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select col1 from ma_table order by 1
    *
    A
    B


    Je souhaiterai que ce * apparaisse en dernier et j'ai vu qu'il existait l'option:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY NLSSORT(1, 'NLS_SORT=BINARY')
    Mais lorsque je l'utilise j'ai le message d'erreur:
    ORA-01785: ORDER BY item must be the number of a SELECT-list expression
    Avez-vous une idée?
    Merci d'avance.

  2. #2
    Membre éprouvé Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    La valeur du paramètre NLS_SORT va influer sur l'ordre de tri.
    En binary, tu obtiendras :
    V ASCII(V)
    ---------- ----------
    * 42
    A 65
    B 66
    _ 95
    a 97
    En french, tu auras :
    V ASCII(V)
    ---------- ----------
    * 42
    _ 95
    A 65
    a 97
    B 66

    En german c'est :
    V ASCII(V)
    ---------- ----------
    * 42
    _ 95
    a 97
    A 65
    B 66

    ORDER BY NLSSORT(col1, 'NLS_SORT=BINARY') marchera mieux.

    Les order by 1,2... c'est pratique car moins de touche à taper mais quand on ajoute/supprimle une colonne on qu'on veux utiliser une fonction de traitement de la colonne, c'est pas glop.

    Dans ton cas, le code ascii de '*' est 42, celui de 'A' est 65, donc toujours avant les caractères alpha.

    Je te suggère (car je n'ai pas trouver de nls_sort répondant à ton besoin) d'en trouver un dans la liste des jeux de caractère valides (si tu es en 10g au moins) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from  V$NLS_VALID_VALUES where parameter='SORT'

  3. #3
    Membre éprouvé Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    Ca y est, j'ai plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    order by replace(col1,'*','zzz')
    en remplaçant zzz par le code ascii le plus élevé par rapport à tes colonnes.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 197
    Points : 56
    Points
    56
    Par défaut
    alors là t'es un boss!!
    j'ignorai que l'on pouvait utiliser REPLACE dans un ORDER BY.
    Thanks a lot!!

  5. #5
    Membre à l'essai
    Profil pro
    Responsable développement
    Inscrit en
    Novembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Responsable développement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup
    j'ai fait la même chose avec un translate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORDER BY TRANSLATE(col1, 'MDCR', '1234')

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

Discussions similaires

  1. [XSLT] Conditionner tri pour date
    Par SONY30 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 11/04/2007, 10h18
  2. 2 paramètres pour ORDER BY
    Par starr dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/01/2007, 16h27
  3. [MySQL] Problème de tri pour une application
    Par nanor21 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 11/05/2006, 19h08
  4. [C#] DataGrid: Conserver tri pour l'édition d'1 ligne
    Par gilder89 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 28/12/2004, 09h17
  5. Réponses: 2
    Dernier message: 15/05/2004, 18h33

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