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

DB2 Discussion :

Condition where que ne marche pas


Sujet :

DB2

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut Condition where que ne marche pas
    Rebonjour,

    Une autre question bete:

    Pourquoi cette requete ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT aggest as ag,cdgest as gc, noclie as tit,nacmpt as nature, nocmpt as compte,intcpt as intitule,etacpt as etat, douves*1000000+douvea*10000+douvem*100+douvej as d_ouv,  dmodfs*1000000+dmodfa*10000+dmodfm*100+dmodfj as d_modif,dclots*1000000+dclota*10000+dclotm*100+dclotj as d_clot
     
    FROM pack10pdta.fcgcop0s 
     
    WHERE    cast(   douves*10000+douvea*100+douvem   as integer)    >=    20000000   or 
             cast(   dmodfs*10000+dmodfa*100+dmodfm   as integer)    >=    20000000   or
             cast(   dclots*10000+dclota*100+dclotm   as integer)    >=    20000000
     
    ORDER BY aggest, nacmpt, noclie
    et celle-ici marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT aggest as ag,cdgest as gc, noclie as tit,nacmpt as nature, nocmpt as compte,intcpt as intitule,etacpt as etat, douves*1000000+douvea*10000+douvem*100+douvej as d_ouv,  dmodfs*1000000+dmodfa*10000+dmodfm*100+dmodfj as d_modif,dclots*1000000+dclota*10000+dclotm*100+dclotj as d_clot
     
    FROM pack10pdta.fcgcop0s 
     
    WHERE    cast(   douves*10000+douvea*100+douvem   as integer)    >=    20000000   or 
             cast(   dmodfs*10000+dmodfa*100+dmodfm   as integer)    >=    2000000   or
             cast(   dclots*10000+dclota*100+dclotm   as integer)    >=    2000000
     
    ORDER BY aggest, nacmpt, noclie
    J'enleve 1 zero de chaque 20000000!
    Je suis sure qu'il y a des enregistrements qui doivent apparaitre dans la première requete, mais elle n'en returne aucun

    Merci d'avance

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    J'ai pas testé mais en tout cas j'utiliserais sans hésiter des parenthèses dans les calculs pour isoler les termes et m'assurer que les opérations sont faites dans l'ordre que je veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    WHERE    cast(  (  (douves*10000) + (douvea*100) + douvem)  )  AS integer  ) >=    20000000   OR
     ... idem pour les autres expressions arithmétiques.

  3. #3
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Juin 2008
    Messages : 154
    Points : 225
    Points
    225
    Par défaut
    Bonsoir,

    Sans test également, n'ayant ni la définition de ta table, ni les valeurs de chaque colonne, ne pourrais tu pas avoir un dépassement de capacité. Integer, c'est environ 2,147 milliards maxi. Si le résultat de ton calcul dépasse cette valeur, DB2 risque de tronquer et de ne pas renvoyer la ligne. Essaye un bigint ou un format du type decimal(15).

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Merci Mercure et pdz74.

    C'est bon aller se reposer et revenir le jour suivant:
    Je voudrais comparer des dates.

    Hier (déjà fatigué), je n'ai pas m'aperçu qu'il y avait le siecle dans les dates de la table. Il faudrait donc faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cast(   douves*1000000+douvea*10000+douvem*100+douvej   AS integer)    >=    20000000


    Je crois que c'est résolu

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

Discussions similaires

  1. [A-03] Rowsource d'une zone de liste que ne marche pas
    Par Marc_27 dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/03/2009, 14h23
  2. une condition simple qui ne marche pas
    Par NulenVBA dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/12/2008, 18h34
  3. Pourquoi ma condition en JSP ne marche pas à 100 % ?
    Par hpl76 dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 20/10/2008, 10h21
  4. Condition qui ne marche pas
    Par Pierre.g dans le forum C
    Réponses: 5
    Dernier message: 24/08/2006, 03h29
  5. [MySQL] Order by qui marche pas, Que faire ?
    Par mulbek dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 06/01/2006, 14h48

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