+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Membre du Club
    Profil pro Baptiste Mazzoleni
    Inscrit en
    mai 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Nom : Baptiste Mazzoleni
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : mai 2010
    Messages : 55
    Points : 41
    Points
    41

    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 Expert
    Homme Profil pro Mathurin
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    951
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathurin
    Âge : 30

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 951
    Points : 1 552
    Points
    1 552

    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 du Club
    Profil pro Baptiste Mazzoleni
    Inscrit en
    mai 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Nom : Baptiste Mazzoleni
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : mai 2010
    Messages : 55
    Points : 41
    Points
    41

    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 Expert
    Homme Profil pro Mathurin
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    951
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathurin
    Âge : 30

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 951
    Points : 1 552
    Points
    1 552

    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 Expert
    Homme Profil pro Mathurin
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    951
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathurin
    Âge : 30

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 951
    Points : 1 552
    Points
    1 552

    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 du Club
    Profil pro Baptiste Mazzoleni
    Inscrit en
    mai 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Nom : Baptiste Mazzoleni
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : mai 2010
    Messages : 55
    Points : 41
    Points
    41

    Par défaut

    Merci à vous, j'ai trouvé une solution !

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

    Code :
    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 :
    1
    2
    SELECT MAX(TotalTTC) FROM commande WHERE MONTH(DateCommande) = 01

    Je fais :

    Code :
    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 Expert
    Homme Profil pro Mathurin
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    951
    Détails du profil
    Informations personnelles :
    Nom : Homme Mathurin
    Âge : 30

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 951
    Points : 1 552
    Points
    1 552

    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 :
    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 :
    1
    2
    SELECT MAX(TotalTTC) FROM commande WHERE MONTH(DateCommande) = 01

    Je fais :

    Code :
    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 Expert
    Homme Profil pro Nicolas Jeanneau
    Développeur et responsable micros/réseaux
    Inscrit en
    octobre 2010
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Nom : Homme Nicolas Jeanneau
    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 215
    Points : 2 496
    Points
    2 496

    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 Expert Avatar de wimbish
    Homme Profil pro Christophe Vibert
    Développeur informatique
    Inscrit en
    octobre 2006
    Messages
    411
    Détails du profil
    Informations personnelles :
    Nom : Homme Christophe Vibert
    Âge : 40
    Localisation : France, Manche (Basse Normandie)

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

    Informations forums :
    Inscription : octobre 2006
    Messages : 411
    Points : 1 033
    Points
    1 033

    Par défaut

    Bonjour,

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

    Code :
    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 du Club
    Profil pro Baptiste Mazzoleni
    Inscrit en
    mai 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Nom : Baptiste Mazzoleni
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : mai 2010
    Messages : 55
    Points : 41
    Points
    41

    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.

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
  •