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

PostgreSQL Discussion :

Tri varchar contenant des nombres et des lettres


Sujet :

PostgreSQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Tri varchar contenant des nombres et des lettres
    Bonjour,
    je désire trier les résultats en fonction du champ "valeur" de ma table. Si je fais un simple ORDER BY valeur, il me retourne les nombres classés selon leur longueur (1, 10, 100, 2, 20,...), or j'aimerais avoir les nombres dans l'ordre 1, 2, 10, 20, 100,...
    Par contre, si je convertis ces nombres en INT, ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM objets ORDER BY CAST ( valeur AS INT )
    Le petit problème est que ce champ ne va pas forcément contenir QUE des nombres, et dans ce cas ça ne fonctionne plus.
    Y a-t-il un moyen simple de faire ce tri correctement ? Ou bien dois-je le programmer du côté de l'application ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par ben106
    Bonjour,
    je désire trier les résultats en fonction du champ "valeur" de ma table. Si je fais un simple ORDER BY valeur, il me retourne les nombres classés selon leur longueur (1, 10, 100, 2, 20,...), or j'aimerais avoir les nombres dans l'ordre 1, 2, 10, 20, 100,...
    Par contre, si je convertis ces nombres en INT, ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM objets ORDER BY CAST ( valeur AS INT )
    Le petit problème est que ce champ ne va pas forcément contenir QUE des nombres, et dans ce cas ça ne fonctionne plus.
    Y a-t-il un moyen simple de faire ce tri correctement ? Ou bien dois-je le programmer du côté de l'application ?
    A condition d'avoir un moyen sûr de tester le type du champ, vous pouvez utiliser un CASE dans le SELECT dans lequel pour le cas "nombre" vous prendrez comme valeur à trier le right( concat ('0000000000000000', champ), 16) (en supposant que la taille max de vos entiers soient de 16 digits - à adapter à vos besoins…)

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour la réponse ! Ca n'a pas l'air de fonctionner avec PostgreSQL (est-ce du code pour MySQL ?), mais ça m'a bien mis sur la voie. J'ai trouvé une fonction PostgreSQL qui complète automatiquement la valeur en ajoutant autant de fois que nécessaire un caractère avant le texte.
    Voici ce que j'ai utilisé pour ajouter des "0" avant le texte jusqu'à ce qu'il ait une longueur de 16 caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ORDER BY LPAD (champ,16,'0')
    Maintenant ça fonctionne, merci !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/12/2014, 20h45
  2. tri sur champ alphanumérique avec des nombres ou des lettres
    Par Satanas_et_diabolo dans le forum Débuter
    Réponses: 2
    Dernier message: 27/04/2012, 12h28
  3. [JavaScript] [SRC] afficher des nombres en toutes lettres
    Par javatwister dans le forum Contribuez
    Réponses: 2
    Dernier message: 07/09/2007, 13h23
  4. [Order by] classer des résultats sur des nombres
    Par vampiloup dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/01/2006, 14h58

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