Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > WinDev
WinDev Forum d'entraide sur la programmation en WinDev
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 02/01/2013, 09h51   #1
mazbap
Nouveau Membre du Club
 
Baptiste Mazzoleni
Inscription : mai 2010
Messages : 43
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 : 43
Points : 32
Points : 32
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 :

Citation:
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,
mazbap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 12h54   #2
michel.souris
Membre confirmé
 
Homme
Développeur informatique
Inscription : mars 2009
Messages : 213
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2009
Messages : 213
Points : 260
Points : 260
Envoyer un message via MSN à michel.souris
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
PHP/HTML/JS/CSS : et avec ça tu fais fessebouc !
Windev : ***** et **** parce que ***** même si ****** bien

"Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)
michel.souris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 13h15   #3
mazbap
Nouveau Membre du Club
 
Baptiste Mazzoleni
Inscription : mai 2010
Messages : 43
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 : 43
Points : 32
Points : 32
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...
mazbap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 14h14   #4
michel.souris
Membre confirmé
 
Homme
Développeur informatique
Inscription : mars 2009
Messages : 213
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2009
Messages : 213
Points : 260
Points : 260
Envoyer un message via MSN à michel.souris
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
PHP/HTML/JS/CSS : et avec ça tu fais fessebouc !
Windev : ***** et **** parce que ***** même si ****** bien

"Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)
michel.souris est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2013, 14h14   #5
michel.souris
Membre confirmé
 
Homme
Développeur informatique
Inscription : mars 2009
Messages : 213
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2009
Messages : 213
Points : 260
Points : 260
Envoyer un message via MSN à michel.souris
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
PHP/HTML/JS/CSS : et avec ça tu fais fessebouc !
Windev : ***** et **** parce que ***** même si ****** bien

"Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)
michel.souris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 15h37   #6
mazbap
Nouveau Membre du Club
 
Baptiste Mazzoleni
Inscription : mai 2010
Messages : 43
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 : 43
Points : 32
Points : 32
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!
mazbap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2013, 15h44   #7
michel.souris
Membre confirmé
 
Homme
Développeur informatique
Inscription : mars 2009
Messages : 213
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mars 2009
Messages : 213
Points : 260
Points : 260
Envoyer un message via MSN à michel.souris
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
PHP/HTML/JS/CSS : et avec ça tu fais fessebouc !
Windev : ***** et **** parce que ***** même si ****** bien

"Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)
michel.souris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 15h51   #8
Nicolas_Jeanneau
Membre Expert
 
Homme Nicolas Jeanneau
Développeur et responsable micros/réseaux
Inscription : octobre 2010
Messages : 889
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 : 889
Points : 1 706
Points : 1 706
Bonjour,

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

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

à bientôt,

Nicolas
Nicolas_Jeanneau est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2013, 12h01   #9
wimbish
Membre Expert
 
Avatar de wimbish
 
Homme Christophe Vibert
Développeur informatique
Inscription : octobre 2006
Messages : 409
Détails du profil
Informations personnelles :
Nom : Homme Christophe Vibert
Âge : 39
Localisation : France, Manche (Basse Normandie)

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

Informations forums :
Inscription : octobre 2006
Messages : 409
Points : 1 043
Points : 1 043
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/
wimbish est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/01/2013, 18h11   #10
mazbap
Nouveau Membre du Club
 
Baptiste Mazzoleni
Inscription : mai 2010
Messages : 43
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 : 43
Points : 32
Points : 32
Je vous remercie, effectivement les deux fonctionnent et correspondent exactement a ce que je voulais faire!
mazbap est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 11h18.


 
 
 
 
Partenaires

Hébergement Web