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 :

Ne pas renvoyer les valeurs NULL


Sujet :

SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut Ne pas renvoyer les valeurs NULL
    Bonjour,

    J'ai une requête du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select substr(p,1,5),substr(p,6,5),substr(p,11,5),substr(16,5)
    from temp;
    Ma table temp contient une valeur de 15 caractères.

    A l'exécution ça donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> select substr(p,1,5),substr(p,6,5),substr(p,11,5),substr(16,5) from temp;
     
    SUBSTR(P,1,5)   SUBSTR(P,6,5)   SUBSTR(P,11,5)
    --------------- --------------- ---------------
    SUBSTR(16,5)
    ----------------------------------------
    toto1           tata1           titi1
    J'aimerais que les SUBSTR à partir de la position 16 ne renvoient rien, car là ils ont quand même l'air d'être pris en compte, à moins que non ?

    Il y a peut-être moyen de dire à la requête de ne renvoyer que les valeurs "non vides" ?

    Merci.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut suite
    J'ai fait le test suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> select substr(p,1,5),substr(p,6,5),substr(p,16,5) from temp where substr(p,
    16,5) is not null;
     
    aucune ligne sÚlectionnÚe
     
    SQL> select substr(p,1,5),substr(p,6,5),substr(p,16,5) from temp where substr(p,
    1,5) is not null;
     
    SUBSTR(P,1,5)   SUBSTR(P,6,5)   SUBSTR(P,16,5)
    --------------- --------------- ---------------
    toto1           tata1


    Cela veut donc dire que la valeur SUBSTR(P,16,5) renvoyée vaut NULL.

    Dans ce cas, mon programme - dans lequel est imbriqué la requête SQL - va-il ignorer purement et simplement cette valeur NULL et ne prendre en compte que les SUBSTR(P,1,5) et SUBSTR(P,6,5) ?

    Merci.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut suite
    Pour ma part, je pense qu'il ne va pas les ignorer.

    C'est pourquoi j'aimerais carrément les "zapper" du résultat de ma requête.

    Toutes les commandes que j'ai trouvé ne répondent pas à ma question :
    ifnull, nvl, exists ...

    et je ne vois pas comment faire une clause WHERE SUBSTR(p,x,x) IS NOT NULL car je veux tout de même renvoyer les valeurs qui ne sont pas NULL.

  4. #4
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Citation Envoyé par David78180 Voir le message
    Dans ce cas, mon programme - dans lequel est imbriqué la requête SQL - va-il ignorer purement et simplement cette valeur NULL et ne prendre en compte que les SUBSTR(P,1,5) et SUBSTR(P,6,5) ?
    ca c'est a toi de gerer ca dans ton programme

    Citation Envoyé par David78180 Voir le message
    Pour ma part, je pense qu'il ne va pas les ignorer. C'est pourquoi j'aimerais carrément les "zapper" du résultat de ma requête.
    Je pense que si un champ fait partie de ton select, alors il doit etre present dans la liste des elements retournes par ta requete peu importe sa valeur de retour. A toi de faire un test dans ton programme pour verifier si oui ou non sa valeur est null ou vide.
    Bref, si tu fais un select sur 4 champs ton resultat te donnera 4 champs.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 77
    Points : 84
    Points
    84
    Par défaut
    Je suis d'accord, c'est ton programme qui doit gérer les NULLs. Tu peux aussi modifier ton query mais ca ne sera pas performant si tu as une grande table temp et je ne suis pas sûr que cela va répondre efficacement à ton problème. Le premier champ indiquera à quel substr cela correspond:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT 1 pos, substr(p,1,5)
    FROM temp
    where substr(1,5) is not null
    union all
    SELECT 2 pos, substr(p,6,5)
    FROM temp
    where substr(6,5) is not null
    union all
    SELECT 3 pos, substr(p,11,5)
    FROM temp
    where substr(11,5) is not null
    union all
    SELECT 4 pos, substr(16,5)
    FROM temp
    where substr(16,5) is not null;

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2008
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 40
    Points : 35
    Points
    35
    Par défaut suite et fin
    Merci à vous.

    En fait j'ai adopté la solution des UNION de SELECT.

    Et ça fonctionne très bien !

  7. #7
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Citation Envoyé par David78180 Voir le message
    Merci à vous.

    En fait j'ai adopté la solution des UNION de SELECT.

    Et ça fonctionne très bien !
    C'est pas trop tôt, ça fait un mois qu'on te cherche

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/12/2010, 12h33
  2. Réponses: 2
    Dernier message: 15/03/2009, 22h52
  3. Ne pas sérializer les valeurs null !
    Par rad_hass dans le forum C#
    Réponses: 16
    Dernier message: 20/02/2009, 21h51
  4. Réponses: 18
    Dernier message: 09/12/2008, 10h40
  5. [Excel] Ne pas tracer les valeurs nulles d'un graphe
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/02/2006, 19h00

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