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

Langage SQL Discussion :

Somme de 2 colonnes avec données pouvant être des caractères


Sujet :

Langage SQL

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

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Points : 66
    Points
    66
    Par défaut Somme de 2 colonnes avec données pouvant être des caractères
    J'ai la requête suivante qui me donne deux colonnes Col0 et Col1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Col0, Col1 FROM Dual
    Mon problème est que j'aimerai en faire la somme mais dans Col0, je peux avoir aussi bien des chiffres que des caractères.
    Lorsque le contenu de ma colonne n'est pas un chiffre, je voudrai que sa valeur soit 0.
    Par exemple
    Col0 Col1 Somme
    0 1 1
    1 55 56
    F 1 1
    4 A 4
    Est-ce possible de faire cela dans un select en testant les valeurs de col0 et col1 (mes caractères sont inconnues et je ne peux pas les lister).

  2. #2
    Membre actif Avatar de yroubag
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2004
    Messages : 162
    Points : 224
    Points
    224
    Par défaut
    Je ne suis pas sûr, mais je crois qu'il existe une fonction ISNUMBER() qui permet de savoir si ta valeur est un nombre.
    Yroubag
    Bien poser les questions, c’est tout un art.
    Où tout dépend, bien sûr, de la réponse que l’on veut obtenir. -André Frossard

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Une astuce que j'ai trouvée récemment pour savoir si une valeur est numérique ou non (en MySQL ça fonctionne en tout cas) :
    Col1 / Col1 donnera 1 si Col1 est numérique et NULL si Col1 n'est pas numérique.
    Il suffit de tester aussi si Col1 = 0 pour capter ce cas de division par zéro qui donne NULL.

    Sinon il y aussi les REGEXP qui peut te dire si la colonne ne contient que des chiffres.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Tu es sous Oracle ?
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    Je suppose que DUAL implique Oracle

    Et non, il n'y a pas de fonction prédéfinie pour tester le type :
    Il te faut l'implémenter toi même !

    L'exemple classique, c'est de demander à ta fonction de faire le CAST et de rattraper l'erreur éventuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    CREATE OR REPLACE FUNCTION IS_NUMBER (test_string in varchar2)
      RETURN NUMBER IS
    BEGIN
      DECLARE dummy number;
      BEGIN
        dummy := to_number(test_string);
        return 1;
      EXCEPTION
        WHEN OTHERS THEN
        return 0;
     
      END;
    END;
    Une fois que tu as ça, c'est tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT CASE Is_number(col1) WHEN 1 THEN to_number(col1) ELSE 0 END
    +
    CASE Is_number(col2) WHEN 1 THEN to_number(col2) ELSE 0 END
    FROM TaTable
    (et méfie toi des gens qui vont te proposer des trucs à base de translate, length, ... ça ne marche pas dans tous les cas)

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

Discussions similaires

  1. Transfer de colonne avec données a une autre table
    Par clarkent dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/11/2009, 15h37
  2. Somme d'une colonne (avec nombre de rangée variable)
    Par Berny77 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/05/2008, 23h30
  3. Somme de chaque colonne avec sauvegarde
    Par delphino7 dans le forum Bases de données
    Réponses: 7
    Dernier message: 23/04/2008, 19h55
  4. Réponses: 2
    Dernier message: 11/12/2007, 22h23

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