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 :

Opération sur un champ null


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 24
    Points
    24
    Par défaut Opération sur un champ null
    Bonjour à tous

    J'ai une table nommée t_marins :

    ID NOM PRENOM DDN DDM
    1 Augin Christophe 1959 null
    2 Bart Jean 1650 1702
    3 Cartier Jacques 1491 1557
    4 Dumont_d'Urville Jules 1790 1842
    5 Dupleix Joseph 1697 1763
    6 Moitessier Bernard 1925 1994
    7 Montcalm Louis 1712 1759
    8 Surcouf Robert 1773 1827
    9 Tabarly Eric 1931 1998

    On me demande de créer une vue v_marins qui comporte les mêmes champs que t_marins avec en plus l'âge de chaque marin à sa mort. Ce champ sera laissé null si le marin est toujours en vie.

    J'ai essayé de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create view v_marins(id,nom,prenom,ddn,ddm,age) as select id,nom,prenom,ddn,ddm, ddm-ddn age from t_marins
    Mais évidement ça ne marche à cause du champ null du marin Augin. Je ne sais pas comment résoudre ce problème. Si vous avez des idées de comment résoudre ce problème? Merci.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Vous pouvez essayer avec un CASE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE VIEW v_marins (id,nom,prenom,ddn,ddm,age) 
    AS 
    SELECT 
           id,
           nom,
           prenom,
           ddn,
           ddm, 
           CASE ddm WHEN NULL THEN NULL ELSE ddm-ddn END age 
    FROM t_marins

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Quel est le SGBD? quels sont les types de ddm et de ddn?
    Car j'aurais tendance à dire que NULL-quelquechose fait null!
    A+
    Soazig

  4. #4
    Membre à l'essai
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par Snipah Voir le message
    Bonjour,

    Vous pouvez essayer avec un CASE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE VIEW v_marins (id,nom,prenom,ddn,ddm,age) 
    AS 
    SELECT 
           id,
           nom,
           prenom,
           ddn,
           ddm, 
           CASE ddm WHEN NULL THEN NULL ELSE ddm-ddn END age 
    FROM t_marins
    Bonjour,

    J'ai essayé votre code, il n'y a pas d'erreur quand je l'exécute. Mais par contre quand je fais :
    J'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01722: Nombre non valide
    J'ai donc essayé de voir où se trouve le problème en affichant une par une les colonnes de v_marins. Les colonnes id,nom,prenom,ddn et ddm passent mais la colonne age affiche bien l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01722: Nombre non valide.
    Le problème viens donc de la colonne age de v_marins.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Comme Soazig l'a déjà demandé, quels sont les types de ddn et ddm?

  6. #6
    Membre à l'essai
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par soazig Voir le message
    Bonjour,
    Quel est le SGBD? quels sont les types de ddm et de ddn?
    Car j'aurais tendance à dire que NULL-quelquechose fait null!
    A+
    Soazig
    Bonjour,
    J'utilise Oracle comme SGBD. ddm et ddn sont tout les deux de type varchar(50).

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    956
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 956
    Points : 1 199
    Points
    1 199
    Par défaut
    Bonjour,
    Il semblerait donc qu'il y ait un problème de conception, pourquoi utiliser un varchar(50) pour stocker une année qui est un entier et qui ne fera jamais 50 caractères.
    Si tu ne peux pas changer ta base de données, ce qui serait recommandé, il faut convertir tes années en nombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
           id,
           nom,
           prenom,
           ddn,
           ddm, 
    to_number(ddm,'9999')-to_number(ddn,'9999') as age
    from t_marins
    A+
    Soazig

  8. #8
    Membre à l'essai
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2009
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par soazig Voir le message
    Bonjour,
    Il semblerait donc qu'il y ait un problème de conception, pourquoi utiliser un varchar(50) pour stocker une année qui est un entier et qui ne fera jamais 50 caractères.
    Si tu ne peux pas changer ta base de données, ce qui serait recommandé, il faut convertir tes années en nombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 
           id,
           nom,
           prenom,
           ddn,
           ddm, 
    to_number(ddm,'9999')-to_number(ddn,'9999') as age
    from t_marins
    A+
    Soazig
    Bonjour Soazig, j'ai suivi ton conseil et appliquer la ligne de code ça marche . Je te remercie et remercie aussi ceux qui ont pris la peine de répondre.

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

Discussions similaires

  1. opération sur des champs
    Par tonia1163 dans le forum IHM
    Réponses: 4
    Dernier message: 22/11/2008, 13h43
  2. [CRX] Expert selection sur un champ NULL
    Par Aitone dans le forum Formules
    Réponses: 1
    Dernier message: 04/08/2008, 10h47
  3. Condition sur un champs null
    Par micbett dans le forum IHM
    Réponses: 4
    Dernier message: 22/03/2008, 15h39
  4. opération sur des champs déjà manipulés
    Par fred23195 dans le forum SQL Procédural
    Réponses: 10
    Dernier message: 23/08/2006, 16h16

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