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 :

select Max d'un varchar


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Par défaut select Max d'un varchar
    Bonjour,

    dans une BDD Oracle j'ai la table suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TableA
    (
     
      REFERENCE          INTEGER,
      VALEURRef          VARCHAR2(255 BYTE) 
    )

    La Requête qui doit afficher le max de la colonne VALEURRef par Reference est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT  max(VALEURRef)     
    FROM TableA
    Group by REFERENCE
    La valeurRef la plus élevée est "199 647,00" mais le résultat de la requête affiche "88 440,00". c'est surement dû au champs valeurRef qui est de type Varchar2.
    comment afficher la vrai valeur la plus élevée cad "199 647,00"?

    PS : je n'ai le droit de changer le type de la colonne valeurRef dans la BDD.

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Si VALEURREF ne contient que des valeurs numériques, faites un TO_NUMBER(VALEURREF).

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Par défaut
    j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT  max(to_number(VALEURRef))     
    FROM TableA
    Group by REFERENCE
    Résultat : message d'erreur : Ora-01722 : Nombre bib valide

  4. #4
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    C'est donc que la colonne ne possède pas que des valeurs numériques.

    Une solution bis mais sans pouvoir t'assurer du résultat ente les valeurs numériques et alphanumériques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT  max(LPAD(VALEURRef,18,'0'))     
    FROM TableA
    Group by REFERENCE
    Et si tu veux t'assurer de n'avoir que des résultats numériques, alors soit tu passes par une expression régulière pour n'avoir que les champs entièrement numérique ou alors par une fonction PL/SQL

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    431
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 431
    Par défaut
    je vous remercie pour votre réponse.

    j'ai essayé le LPAD. Résultat : il m'a affiché la valeur supérieure.

    sinon effectivement je ne veux avoir que les valeurs numérique. quelle est cette expression régulière svp?

    Merci d'avance

  6. #6
    Membre Expert
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Par défaut
    Je pense que l'expression va dépendre du fait d'avoir ou non des décimales dans un premier temps, après je ne suis pas expert des expressions régulières non plus...

    Sinon pour vous aider, voici une fonction qui pourrait faire l'affaire pour ne sélectionner que les valeurs numériques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT  REFERENCE, max(VALEURRef)     
    FROM TableA
    WHERE LENGTH(TRIM(TRANSLATE(VALEURRef, ' +-.,0123456789', ' '))) IS NULL
    Group by REFERENCE

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

Discussions similaires

  1. problème avec un select max
    Par bobic dans le forum Oracle
    Réponses: 7
    Dernier message: 14/11/2005, 11h22
  2. [SQL] requete select max
    Par kabikou dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 19/10/2005, 16h18
  3. Aide pour un SELECT MAX(...)
    Par Gladiator dans le forum Langage SQL
    Réponses: 7
    Dernier message: 24/06/2005, 16h48
  4. Incrémenter champ : insert into . select max(.) + 1 from .
    Par ludo.guy dans le forum Langage SQL
    Réponses: 10
    Dernier message: 25/11/2004, 14h39
  5. Problème select MAX(annee) dans une requête
    Par grisounette dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 28/10/2004, 17h36

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