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

WinDev Discussion :

Manipulation de Date [WD17]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Points : 73
    Points
    73
    Par défaut Manipulation de Date
    Bonjour à tous et bonne année,

    Après quelques recherches je ne trouve pas la solution a ma question, je viens donc vers vous pour avoir de l'aide :

    C'est une requête qui me pose soucis :

    SELECT MAX(TotalTTC) FROM commande WHERE MONTH(DateCommande) = 01
    Une erreur est détectée en me disant que dans cette version les procédures stockées ne sont pas supportées en HyperFileSQL.

    Je cherche a récupérer un total par rapport a un mois issu d'une date :
    Ex MaDate vaut : 01/01/2013, je recupère le mois MONTH(MaDate), de plus, je sais que cela fonctionne en SQL.


    Je vous remercie d'avance,

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Citation Envoyé par mazbap Voir le message
    Bonjour à tous et bonne année,

    Après quelques recherches je ne trouve pas la solution a ma question, je viens donc vers vous pour avoir de l'aide :

    C'est une requête qui me pose soucis :



    Une erreur est détectée en me disant que dans cette version les procédures stockées ne sont pas supportées en HyperFileSQL.

    Je cherche a récupérer un total par rapport a un mois issu d'une date :
    Ex MaDate vaut : 01/01/2013, je recupère le mois MONTH(MaDate), de plus, je sais que cela fonctionne en SQL.


    Je vous remercie d'avance,
    Bonjour et bonne année également,

    A ma connaissance il n'y a pas de fonction MONTH en SQL standard... avec quel SGBD travaillez vous ?
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Points : 73
    Points
    73
    Par défaut
    Merci pour ta réponse,

    Ma base est en HyperFileSQL Classic. J'ai fais des tests sur phpMyAdmin => MySQL et la par contre ca fonctionne...

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Citation Envoyé par mazbap Voir le message
    Merci pour ta réponse,

    Ma base est en HyperFileSQL Classic. J'ai fais des tests sur phpMyAdmin => MySQL et la par contre ca fonctionne...
    Dans ce cas il faut utiliser la fonction TO_CHAR (pas vraiment standard non plus...)

    SELECT MAX(TotalTTC) FROM commande WHERE TO_CHAR(DateCommande,'MM') = '01'

    ou encore les fonctions PCSOFT accessible en SQL grâce au préfixe "WL." :

    SELECT MAX(TotalTTC) FROM commande WHERE WL.DateVersChaîne(DateCommande,'MM') = 01

    En fait quand j'y pense je ne connais pas de fonction inclu dans la norme SQL pour la manipulation de date... si quelqu'un peut confirmer ?
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Citation Envoyé par mazbap Voir le message
    Merci pour ta réponse,

    Ma base est en HyperFileSQL Classic. J'ai fais des tests sur phpMyAdmin => MySQL et la par contre ca fonctionne...
    Ca fonctionne car c'est une fonction MySQL !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Points : 73
    Points
    73
    Par défaut
    Merci à vous, j'ai trouvé une solution !

    Je définit deux date (une min et une max) comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dMaVarMoisMin est une Date
    dMaVarMoisMin..Jour = 01
    dMaVarMoisMin..Mois = MoisEnCours()
    dMaVarMoisMin..Année =AnnéeEnCours()
    dMaVarMoisMax..Jour = 31
    dMaVarMoisMax..Mois = MoisEnCours()
    dMaVarMoisMax..Année =AnnéeEnCours()
    Je les utilisent ensuite dans ma requête SQL à l'aide du between!

    C'est a dire, plutôt que de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MAX(TotalTTC) FROM commande WHERE MONTH(DateCommande) = 01

    Je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(TotalTTC) FROM commande WHERE DateCommande between dMaVarMoisMin  and dMaVarMoisMax
    Ce qui revient au même.

    Merci encore est bonne continuation!

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Citation Envoyé par mazbap Voir le message
    Merci à vous, j'ai trouvé une solution !

    Je définit deux date (une min et une max) comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    dMaVarMoisMin est une Date
    dMaVarMoisMin..Jour = 01
    dMaVarMoisMin..Mois = MoisEnCours()
    dMaVarMoisMin..Année =AnnéeEnCours()
    dMaVarMoisMax..Jour = 31
    dMaVarMoisMax..Mois = MoisEnCours()
    dMaVarMoisMax..Année =AnnéeEnCours()
    Je les utilisent ensuite dans ma requête SQL à l'aide du between!

    C'est a dire, plutôt que de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT MAX(TotalTTC) FROM commande WHERE MONTH(DateCommande) = 01

    Je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(TotalTTC) FROM commande WHERE DateCommande between dMaVarMoisMin  and dMaVarMoisMax
    Ce qui revient au même.

    Merci encore est bonne continuation!

    De rien !

    Par contre ça ne revient pas vraiment au même... vous allez potentiellement tester des dates qui n'existe pas (le 31/02... par exemple), vous initialisez plusieurs variables (au prix actuel de la mémoire, c'est pas la fin du monde je vous l'accorde) sur lesquelles vous effectuez des opérations et enfin un BETWEEN est largement moins performant qu'un test d'égalité... (il me semble) mais ça n'est que mon avis de non expert !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  8. #8
    Membre émérite
    Homme Profil pro
    Développeur et responsable micros/réseaux
    Inscrit en
    Octobre 2010
    Messages
    1 286
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur et responsable micros/réseaux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 286
    Points : 2 562
    Points
    2 562
    Par défaut
    Bonjour,

    il faut que tu passes par des fonctions intermédiaires du style :

    WL.Milieu(CAST(DateCommande AS INt),5,2)

    à bientôt,

    Nicolas

  9. #9
    Membre éprouvé Avatar de wimbish
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 416
    Points : 1 073
    Points
    1 073
    Par défaut
    Bonjour,

    En HF classic tu peux manipuler une date comme une chaîne donc tu peux faire directement en SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT MAX(TotalTTC) FROM commande WHERE mid(DateCommande,5,2) = '01'
    Christophe.

    Tous les chemins mènent à Rome http://doc.pcsoft.fr/fr-FR/

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2010
    Messages : 57
    Points : 73
    Points
    73
    Par défaut
    Je vous remercie, effectivement les deux fonctionnent et correspondent exactement a ce que je voulais faire!

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

Discussions similaires

  1. Manipulations de dates et heures
    Par benj63 dans le forum C++
    Réponses: 5
    Dernier message: 16/12/2004, 16h09
  2. [JDBC] manipulation des dates/heures en Java
    Par kurkLord dans le forum JDBC
    Réponses: 6
    Dernier message: 09/08/2004, 13h49
  3. Manipulations des Dates
    Par kurtc dans le forum Langage SQL
    Réponses: 11
    Dernier message: 13/04/2004, 15h39
  4. [IB6][BCB5]Manipulation des dates.
    Par Sitting Bull dans le forum SQL
    Réponses: 4
    Dernier message: 09/04/2004, 16h33
  5. Manipuler des dates...
    Par Ti Jen-tsie dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2003, 12h46

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