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

Requêtes et SQL. Discussion :

requête SQL comparaison de dates avec IIF


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut requête SQL comparaison de dates avec IIF
    Bonsoir,
    J'ai un nouveau pb. J'ai une table avec 2 champs date : (datedébut=DEB)
    DEB1 - DEB2 - PRX_VEN_HT1 - PRX_VEN_HT2
    01/01/1994 - ( vide ) - 100 - ( vide )
    02/10/2000 - 01/10/2005 - 101 - 102
    01/10/2008 - ( vide ) - 103 - ( vide )
    01/11/2009 - 01/10/2010 - 104 - 105

    Je dois faire une comparaison des 2 champs avec la date du jour pour conserver le prix utile dans une nouvelle colonne.

    Exemple now() = 23/09/2009
    cas 1 = je dois garder 100 (car pas de datedébut2)
    Cas2 = je dois garder 102 car il n'y pas de datedébut plus haute qu'elle
    Cas 3 = je ne dois rien garder (datedébut1 est supérieure) (ou si + simple, je garde une date complétement bidon du genre 01/01/1900)
    Cas 4 = idem je ne dois rien garder.



    A force de chercher sur le forum, j'ai trouvé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IIf(Format(Now(),"dd/mm/yyyy")<=Format(DEB1,"dd/mm/yyyy"),PRX_VEN_HT_1,PRX_VEN_HT_2) AS test

    Mais cela ne réponds pas à toutes les possibilités.
    J'avoue couler dans l'imbrication de plusieurs IIF.


    Est-ce quelqu'un pourrait m'aider ?
    Merci
    Thibault

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    bonjour,
    dans le générateur d'expression voir "PremierVrai".
    a fabriquer une fonction dans VBA voir Select Case.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Merci LE VIEUX

    Je viens de partir à la rechercher d'infos. Je ne trouvais pas grand chose sur PremierVrai mais par contre j'ai trouvé plus extraits de codes sur PremVrai() et switch()

    Je vais lire tout ceci

    A+
    Thibault

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 683
    Points : 237
    Points
    237
    Par défaut
    Me voici de retour après documentation de la fonction. Mais j'ai un autre pb

    A l'origine, j'ai une table avec des champs date en texte. Je les passe en CDate mais parfois la cellule est vide.
    Dans ma Switch, je teste la date du jour par rapport à ces 2 champs date convertis et formatés
    Mais je n'arrive pas à tester qd la cellule est vide !!

    voici mon code:
    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
    16
    17
    18
    19
    20
    21
    SELECT dbo_ARTICLES.COD_ART, dbo_ARTICLES.DGN, dbo_ARTICLES.DEB_TRF_1, dbo_ARTICLES.PRX_VEN_HT_1, dbo_ARTICLES.DEB_TRF_2, dbo_ARTICLES.PRX_VEN_HT_2, (Now()) AS DATEJOUR, 
    iif(
       isdate(RIGHT([DEB_TRF_1],2) & "/" & Mid([DEB_TRF_1],5,2) & "/" & LEFT([DEB_TRF_1],4)),
       CDate(RIGHT([DEB_TRF_1],2) & "/" & Mid([DEB_TRF_1],5,2) & "/" & LEFT([DEB_TRF_1],4)),""
       ) AS DEB1,
    iif(
       isdate(RIGHT([DEB_TRF_2],2) & "/" & Mid([DEB_TRF_2],5,2) & "/" & LEFT([DEB_TRF_2],4)),
       CDate(RIGHT([DEB_TRF_2],2) & "/" & Mid([DEB_TRF_2],5,2) & "/" & LEFT([DEB_TRF_2],4)),
       ) AS DEB2,
    IIf(Format(Now(),"dd/mm/yyyy")<=Format(DEB1,"dd/mm/yyyy"),PRX_VEN_HT_1,PRX_VEN_HT_2) AS test,
    Format(DEB1,"dd/mm/yyyy") As DEB1FORMAT,
    Format(DEB2,"dd/mm/yyyy") As DEB2FORMAT,
    Format(Now(),"dd/mm/yyyy") AS NOWFORMAT,
    
     Switch(
    [NOWFORMAT]>[DEB1FORMAT] AND [NOWFORMAT]>=[DEB2FORMAT],[DEB2FORMAT],
    [NOWFORMAT]>=[DEB1FORMAT] AND [NOWFORMAT]<[DEB2FORMAT],[DEB1FORMAT],
    [NOWFORMAT]>=[DEB1FORMAT] AND [DEB2FORMAT] IS NULL,"VIDE en D2"
    ) AS Expr1
    FROM dbo_ARTICLES
    ORDER BY dbo_ARTICLES.COD_ART;
    J'ai mis en rouge la ligne qui ne fonctionne pas.
    Un expert saurait-il me dire ce qui ne va pas ds ce code ??

    Merci
    Thib

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France

    Informations professionnelles :
    Secteur : Services à domicile

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 219
    Points : 1 707
    Points
    1 707
    Par défaut
    bonjour,
    il faut mettre IsNull avant [DEB2FORMAT]
    par rapport à ton premier post :

    OK, j’ai tapé un peu vite et je suis allé jusqu’au bout de la francisation de la fonction.
    D’autre part la fonction Select Case ne s’applique pas forcément à ton cas mais c’était plutôt une réponse aux cumuls des If dans certains cas.
    Pour ton exemple j’ai un problème avec ton Cas 3 – soit il est tel quel et il s’identifie au cas 1, soit l’année était 2009 et là il faudrait voir s’il ne faut pas faire une différence avec cas 4 où dire que c’est que l’une où l’autre date > maintenant c’est « « .
    Au niveau du code 2 possibilités avec ce que j’anticipe de ta problématique et que dans ton exemple le cas 3 était au 01/10/2009.
    Soit :
    Avec PremVrai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Test: PremVrai([DEB1]<Maintenant() Et EstNull([DEB2]);[PRX_VEN_HT1];[DEB1]<Maintenant() Et [DEB2]<Maintenant();[PRX_VEN_HT2];[DEB1]<Maintenant() Et EstNull([PRX_VEN_HT2]);" ";[DEB1]>Maintenant();" ")
    Soit avec VBA :
    Module avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function test(DEB1, DEB2, PRX_VEN_HT1, PRX_VEN_HT2)
    If DEB1 < Now And IsNull(DEB2) Then
    test = PRX_VEN_HT1
    ElseIf DEB1 < Now And DEB2 < Now Then
    test = PRX_VEN_HT2
    ElseIf DEB1 < Now And IsNull(PRX_VEN_HT2) Then
    test = ""
    ElseIf DEB1 > Now Then
    test = ""
    End If
    End Function
    et dans la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestVBA: test([DEB1];[DEB2];[PRX_VEN_HT1];[PRX_VEN_HT2])

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/07/2012, 14h43
  2. clause sql sur champ Date avec masque de saisie
    Par TOMSEC dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/04/2007, 12h20
  3. Requêtes SQL pour les Dates et numériques
    Par Ramage03 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2006, 17h26
  4. [SQL2K] requête SQL, comparer des dates
    Par cortex024 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 16/03/2006, 14h32
  5. Requête sql regroupement de dates
    Par rocs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 28/07/2005, 16h40

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