Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

Discussion: DateAdd et février

  1. #1
    Membre Expert
    Homme Profil pro AbdelHakim Kellouche
    Inscrit en
    mai 2008
    Messages
    2 107
    Détails du profil
    Informations personnelles :
    Nom : Homme AbdelHakim Kellouche
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 107
    Points : 2 131
    Points
    2 131

    Par défaut DateAdd et février

    Salut !
    dans un de mes codes je me suis aperçu que DateAdd ne donne aucun résultat quand je lui passe comme argument le mois de février.

    pour pouvoir me suivre je mets le bout de code en question :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    BEGIN
    FOR
         select
            d.code_unite,
            d.nom_unite,
     
            sum( c.frais_total ) frais_total,
     
            sum( a.montant_facture  ) montant_facture,
            sum( ( e.volume_mj_sortie ) * ( e.nombre_jour_reel ) ) volume_mj_sortie,
     
            /* calcul du ratio d'épuration */
            (
                 (  sum( c.frais_total  )   +  sum( a.montant_facture  )  ) /
                 ( sum( ( e.volume_mj_sortie ) * ( e.nombre_jour_reel ) ) )
            ) ratio
     
        from tb_energie a
            inner join tb_step b on ( a.code_step = b.code_step )
            inner join tb_frais_exploitations c on ( b.code_step = c.code_step )
                    and ( c.date_mois between :date_debut and :date_fin )
            inner join tb_unite d on ( b.code_unite = d.code_unite )
            inner join tb_process e on ( b.code_step = e.code_step )
                    and ( e.date_bilan between :date_debut and :date_fin )
     
        where
            (
                a.date_mois between dateadd(month, -1, :date_debut) and dateadd(month, -1, :date_fin)
            )
     
        group by d.code_unite, d.nom_unite
     
        into
                :CODE_UNITE,
                :NOM_UNITE,
                :FRAIS_TOTAL,
                :MONTANT_FACTURE,
                :VOLUME_MJ_SORTIE,
                :RATIO_EXP_EAU_EPUREE
     
    do
    begin
      suspend;
      end
    end
    Pour tout les mois j'ai le bon résultat mais quand je passe le mois de février en argument j'ai un tableau vide !!! s'agit'il d'un bug ?
    Bon courage ou Bonne Chance (selon le contexte)

  2. #2
    Expert Confirmé Sénior
    Avatar de Cl@udius
    Homme Profil pro Claude Renouleaud
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Nom : Homme Claude Renouleaud
    Âge : 51
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 4 878
    Points : 9 650
    Points
    9 650

    Par défaut

    Salut

    :DATE_DEBUT et :DATE_FIN sont bien des TIMESTAMP ?

    Parce que ceci me renvoie un résultat correct:
    Code :
    SELECT DATEADD(MONTH, -1, CAST('2012-02-29' AS TIMESTAMP)) FROM RDB$DATABASE
    soit le 29 janv. 2012.



    @+ Claudius
    A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.

  3. #3
    Membre Expert
    Homme Profil pro AbdelHakim Kellouche
    Inscrit en
    mai 2008
    Messages
    2 107
    Détails du profil
    Informations personnelles :
    Nom : Homme AbdelHakim Kellouche
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 107
    Points : 2 131
    Points
    2 131

    Par défaut

    Citation Envoyé par Cl@udius Voir le message
    Salut

    :DATE_DEBUT et :DATE_FIN sont bien des TIMESTAMP ?

    Parce que ceci me renvoie un résultat correct:
    Code :
    SELECT DATEADD(MONTH, -1, CAST('2012-02-29' AS TIMESTAMP)) FROM RDB$DATABASE
    soit le 29 janv. 2012.



    @+ Claudius
    Merci pour la réponse mon ami.
    à vrai dire c'était des date, je viens de les changer en TimesTamp mais toujours rien !!!! pourtant mes tables sont bien renseignées !!!
    Bon courage ou Bonne Chance (selon le contexte)

  4. #4
    Expert Confirmé Sénior
    Avatar de Cl@udius
    Homme Profil pro Claude Renouleaud
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Nom : Homme Claude Renouleaud
    Âge : 51
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 4 878
    Points : 9 650
    Points
    9 650

    Par défaut

    Citation Envoyé par Just-Soft Voir le message
    à vrai dire c'était des date, ...
    Oui quand je disais TIMESTAMP, il peut également s'agir de DATE ou DATETIME.
    Je voulais juste m'assurer que tu manipulais bien une date.

    Sinon je ne vois pas. Et quand tu debug ta procédure, ça donne quoi ?
    A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.

  5. #5
    Membre Expert
    Homme Profil pro AbdelHakim Kellouche
    Inscrit en
    mai 2008
    Messages
    2 107
    Détails du profil
    Informations personnelles :
    Nom : Homme AbdelHakim Kellouche
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 107
    Points : 2 131
    Points
    2 131

    Par défaut

    Citation Envoyé par Cl@udius Voir le message
    Oui quand je disais TIMESTAMP, il peut également s'agir de DATE ou DATETIME.
    Je voulais juste m'assurer que tu manipulais bien une date.

    Sinon je ne vois pas. Et quand tu debug ta procédure, ça donne quoi ?
    ça donne rien et c'est ce qui m'intrigue !
    j'ai une ligne vide mais aucune erreur
    Bon courage ou Bonne Chance (selon le contexte)

  6. #6
    Expert Confirmé Sénior
    Avatar de Cl@udius
    Homme Profil pro Claude Renouleaud
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Nom : Homme Claude Renouleaud
    Âge : 51
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 4 878
    Points : 9 650
    Points
    9 650

    Par défaut

    Alors a priori rien voir avec DateAdd, mais plutôt un jeu de données qui est bancal pour ce mois (cf les INNER JOIN avec les BETWEEN).

    Découpe ta requête 'en petits morceaux' pour voir ce que cela donne.
    A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.

  7. #7
    Membre Expert
    Homme Profil pro AbdelHakim Kellouche
    Inscrit en
    mai 2008
    Messages
    2 107
    Détails du profil
    Informations personnelles :
    Nom : Homme AbdelHakim Kellouche
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 107
    Points : 2 131
    Points
    2 131

    Par défaut

    Citation Envoyé par Cl@udius Voir le message
    Alors a priori rien voir avec DateAdd, mais plutôt un jeu de données qui est bancal pour ce mois (cf les INNER JOIN avec les BETWEEN).

    Découpe ta requête 'en petits morceaux' pour voir ce que cela donne.
    ok je vais voir
    Bon courage ou Bonne Chance (selon le contexte)

  8. #8
    Membre Expert
    Homme Profil pro AbdelHakim Kellouche
    Inscrit en
    mai 2008
    Messages
    2 107
    Détails du profil
    Informations personnelles :
    Nom : Homme AbdelHakim Kellouche
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 107
    Points : 2 131
    Points
    2 131

    Par défaut

    je viens de trouver le problème en attendant vos pistes pour une solution. alors voilà, dans mes tables, on a opté pour le dernier jour de chaque mois quand il s'agit d'un champ type date, par exemple, date_mois du bilan c'est toujours le 30, 31, 28 ou 29. avec la fonctions adddate, je me suis aperçu que celle fonctionne réagis mal avec les dates du 30 du mois, elle donne aucun résultat, par contre avec les 31 j'ai toujours le bon compte.

    à mon sens, l'argument month quand il est passé, il retranche pas le mois mais aussi le nombre de jours, ce qui fait qu'il retombe pas sur ma date de saisie.

    donc, il me semble que la solution est de forcer la date pour qu'elle prenne toujours le dernier jour du mois en question ! mais je ne sais comment faire
    Bon courage ou Bonne Chance (selon le contexte)

  9. #9
    Expert Confirmé Sénior
    Avatar de Cl@udius
    Homme Profil pro Claude Renouleaud
    Développeur informatique
    Inscrit en
    février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Nom : Homme Claude Renouleaud
    Âge : 51
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2006
    Messages : 4 878
    Points : 9 650
    Points
    9 650

    Par défaut

    Citation Envoyé par Just-Soft Voir le message
    donc, il me semble que la solution est de forcer la date pour qu'elle prenne toujours le dernier jour du mois en question ! mais je ne sais comment faire
    Exemple avec la date du jour. Cela retourne le 1° jour du mois. Pour le dernier je te laisse adapter.

    Code :
    1
    2
    3
    4
    SELECT
      DATEADD(DAY, 1 - EXTRACT(DAY FROM CURRENT_DATE), CURRENT_DATE)
    FROM
      RDB$DATABASE

    [Edit] Sinon sous Delphi (si c'est le cas), tu as StartOfAMonth et EndOfAMonth de DateUtils.
    @+ Claudius
    A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.

  10. #10
    Membre Expert
    Homme Profil pro AbdelHakim Kellouche
    Inscrit en
    mai 2008
    Messages
    2 107
    Détails du profil
    Informations personnelles :
    Nom : Homme AbdelHakim Kellouche
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 107
    Points : 2 131
    Points
    2 131

    Par défaut

    Citation Envoyé par Cl@udius Voir le message
    Exemple avec la date du jour. Cela retourne le 1° jour du mois. Pour le dernier je te laisse adapter.

    Code :
    1
    2
    3
    4
    SELECT
      DATEADD(DAY, 1 - EXTRACT(DAY FROM CURRENT_DATE), CURRENT_DATE)
    FROM
      RDB$DATABASE

    [Edit] Sinon sous Delphi (si c'est le cas), tu as StartOfAMonth et EndOfAMonth de DateUtils.
    @+ Claudius
    Re,
    c'est pas ce que je voulais ... mon problème est dans le where, je veux que lorsque je fais (month, -1) je veux me retrouver sur le dernier jour du mois résultant

    Edit : je ne suis pas encore arrivé au stade DELPHI
    Bon courage ou Bonne Chance (selon le contexte)

  11. #11
    Rédacteur/Modérateur
    Avatar de SergioMaster
    Homme Profil pro Serge Girard
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    5 408
    Détails du profil
    Informations personnelles :
    Nom : Homme Serge Girard
    Âge : 58
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 5 408
    Points : 10 601
    Points
    10 601
    Billets dans le blog
    1

    Par défaut

    je ne sais pas si j'ai tout compris , il s'agit de ce WHERE ?
    Code :
    1
    2
    3
    4
       WHERE
            (
                a.date_mois BETWEEN dateadd(month, -1, :date_debut) AND dateadd(month, -1, :date_fin)
            )
    s'il s'agit en fait d'obtenir les mouvements d'un ou plusieurs mois pourquoi ne pas faire un test que sur ce dernier ?
    Code :
    1
    2
    3
    4
       WHERE
            (
                EXTRACT(MONTH,a.date_mois) BETWEEN EXTRACT(MONTH,dateadd(month, -1, :date_debut)) AND EXTRACT(MONTH(dateadd(month, -1, :date_fin))
            )
    La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
    J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
    Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous

  12. #12
    Membre Expert
    Homme Profil pro AbdelHakim Kellouche
    Inscrit en
    mai 2008
    Messages
    2 107
    Détails du profil
    Informations personnelles :
    Nom : Homme AbdelHakim Kellouche
    Localisation : Algérie

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : mai 2008
    Messages : 2 107
    Points : 2 131
    Points
    2 131

    Par défaut

    je crois que je me suis mal fait comprendre
    alors voilà...
    je prends un exemple concret :
    je veux extraire les données relatives au mois d'avril 2012 depuis la table tb_frais_exploitation mais les données relatives au mois de mars 2012 depuis la table tb_energie. et puisque la date dans mes deux tables et du genre "30/04/2012" pour avril et "31/03/2012" pour mars. dans ce cas précis ma requête me retourne un tableau vide alors que les données sont bien présentes dans les deux tables pour les mois correspondants à mon exemple.
    mais si je demande d'extraire les données de juillet depuis la table tb_exploitation et juin de la table tb_energie j'ai bel et bien mon résultat.

    donc j'ai conclu que l'argument month ne retranche pas le mois mais le nombre de jour c'est pourquoi il se retrouve pas dans mes tables puisque les dates ont été saisies le dernier jour de chaque mois.
    Bon courage ou Bonne Chance (selon le contexte)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •