PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Problème de requêtes SQL avec date
Problème de requêtes SQL avec date
Débuté par PB-Consulting, 04 mar. 2014 19:39 - 9 réponses
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 04 mars 2014 - 19:39
Hello,

Depuis la màj avec la version WD19, je rencontre un problème avec des requêtes avec date

Exemple :
SELECT
SUM(Heures.NbrHeures) AS SommeNbrHeures
FROM
Heures
WHERE
Heures.IDEmployés = {rqIdEmployé}
AND Heures.TypeHeure = {rqTypeHeure}
AND LEFT(Heures.DateHeureDu ,{rqModeDate} ) = {rqPériode}

Cette requête fait la somme des heures pour une période donnée (Ex : rqModeDate = 6 et rqPériode = 201402) permettait d'obtenir un résultat par Année, Année & mois, ainsi qu'une date.

Avec les version WDx antérieur aucun problème, mais depuis la WD19, la requête fonctionne anormalement
201401 OK seulement le mois de janvier
201402 ? février et mars !!!
201403 ok seulement mars

fait le test avec 201302 et là j'ai les données de février à septembre 2013

J'ai refais les tests avec la WD18 & HFSQL 18, et la miracle tout est correct :merci:

Je suis ouvert à toute suggestion, j'ai plusieurs requêtes sûr ce principe, mais depuis la màj chez clients, c'est le bord.. et comme c'est les heures de timbrages ça gue... dans les chaumières ... ;(

Merci d'avance, @+ Phil

--
BonDev, @+ Phil
Membre enregistré
1 933 messages
Popularité : +53 (65 votes)
Posté le 04 mars 2014 - 19:55
Bonjour,

Je suggère de créer une requête "détail" en rajoutant LEFT(Heures.DateHeureDu ,{rqModeDate} ) et Heures.DateHeureDu dans le résultat de votre requête pour comprendre pourquoi ces enregistrements sont sélectionnés.

--
Bon dev.
Jean-Pierre
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 04 mars 2014 - 20:14
Hello Jean-Pierre,

Merci pour votre réponse, j'ai déjà tester la(es) requêtes en affichant le détail, et c'est là que j'ai constaté les dates aberrantes en résultat ;(
Je vais passer ma nuit à modifier mes requêtes ~25 et refaire un test projet complet ...

Avec des BETWEEN, cette méthode fonctionne, mais elle est beaucoup plus lente }:(

SELECT
SUM(Heures.NbrHeures) AS SommeNbrHeures
FROM
Heures
WHERE
Heures.IDEmployés = {rqIdEmployé}
AND Heures.TypeHeure = {rqTypeHeure}
AND Heures.DateHeureDu BETWEEN {rqDateDu} AND {rqDateAu}

Encore merci, et bonne fin de soirée.

--
BonDev, @+ Phil
Membre enregistré
66 messages
Popularité : +1 (1 vote)
Posté le 23 avril 2014 - 16:32
J'ai un souci identique (ou presque) sur une requête de même type...





La requête fonctionne très bien sauf pour les derniers jours de chaque mois...
Si je passe le 29 avril en paramètre pas de soucis, mais le 30 avril me fais obtenir toutes les dates supérieures ou égales au 30 avril.
Ci-après le résultat de la requête
(Colonne 1 le paramètre passé Colonne 2 les enregistrements obtenus)
En passant une date différente du dernier jour du mois :
20140425 - 20140425
20140425 - 20140425
En passant une date égale au dernier jour d'un mois (car identique pour tous les derniers jours du mois)
20140430 - 20140607
20140430 - 20140518
20140430 - 20140510
20140430 - 20140525
20140430 - 20140512
20140430 - 20140608
20140430 - 20140517
20140430 - 20140519
20140430 - 20140615
20140430 - 20140607
20140430 - 20140618
20140430 - 20140721
20140430 - 20140816
Membre enregistré
940 messages
Popularité : +66 (68 votes)
Posté le 23 avril 2014 - 16:50
Bonjour,

essayer la fonction SUBSTR() plutôt que LEFT()

SELECT
Sum(Heures.NbrHeures) AS SommeNbrHeures
FROM
Heures
WHERE
Heures.IDEmployés = {rqIdEmployé}
AND Heures.TypeHeure = {rqTypeHeure}
AND SUBSTR(Heures.DateHeureDu ,1,{rqModeDate} ) = {rqPériode}


bon dèv ;)
Membre enregistré
940 messages
Popularité : +66 (68 votes)
Posté le 23 avril 2014 - 18:04
mais c'est quand même un gros soucis que la fonction Left ne fonctionne pas correctement sur une rubrique de type DateHeure :'(

je viens d'envoyer une requete au ST on verra....
Membre enregistré
940 messages
Popularité : +66 (68 votes)
Posté le 23 avril 2014 - 18:41
re bonjour,

donc voici la réponse du ST.

//....
Je vous tiens informé dès que je dispose de leur retour. Dans l'immédiat, l'utilisation de WL.Gauche à la place du LEFT peut également constituer un paliatif.

Référence à rappeler pour tout contact à ce sujet : 86 808/204382.
//....
Membre enregistré
18 messages
Popularité : +1 (1 vote)
Posté le 24 avril 2014 - 08:29
Hello Christophe,

Merci pour vos démarches auprès du ST.

Ce problème m'a fait apparaître d'autres cas, et j'ai dû tout reprendre mes requêtes et les tester 1 à 1
Mes clients ont eu de la peine à croire à ce type de problème ... qui à comme résultat de faire n'importe quoi dans les calculs, et à créé une perte de confiance dans les résultats calculés :(

BonDev @+ Phil

--
BonDev, @+ Phil
Membre enregistré
66 messages
Popularité : +1 (1 vote)
Posté le 24 avril 2014 - 22:32
J'avais également fait une requête au ST. Et ils viennent de sortir un correctif : incident 86808/366356.
Merci pour leur réactivité. :merci:
Membre enregistré
576 messages
Popularité : +17 (25 votes)
Posté le 25 avril 2014 - 15:45
Bonjour,

Le correctif apporté par notre équipe Développement a été ajouté dans les ressources pratiques (lien "Liste des modules correctifs disponibles de WINDEV, WEBDEV, WINDEV Mobile") :
http://www.pcsoft.fr/st/nouveautes-st.html

Il concerne exclusivement l'utilisation du type dateheure, dans une commande LEFT d'une clause WHERE d'une requête SQL.

Veuillez nous excuser pour le contretemps occasionné.

--
Guillaume Bayle (Twitter : @GuillaumeBayle)
Support Technique PC SOFT
http://www.pcsoft.fr/st/index.html