PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → Etats & Requêtes → Requête SQL sous HFSQL avec Date et heure
Requête SQL sous HFSQL avec Date et heure
Débuté par Josh Fustier, 04 avr. 2023 19:45 - 3 réponses
Posté le 04 avril 2023 - 19:45
Bonjour,

Je rencontre un problème assez embêtant au niveau d'une requête SQL avec date et heures.

J'ai une table de ligne de factures "LFACTURE" qui contient X colonnes dont :

- LFDJOU de type Date sur 8 octets
- LFHEURE de type Heure sur 6 octets

Je souhaite récupérer toutes les lignes comprises entre deux dates (pour l'exemple) :
le 01/03/2023 à 17h00 et 0 secondes et le 02/03/2023 à 5h35 et 12 secondes

Actuellement la seule solution fonctionnelle que j'ai trouvé est de concaténer la date et l'heure en une string, voici un exemple.

SELECT LFACTURE.LFFFCLEUNIK AS ID
FROM LFACTURE
WHERE CONCAT(LFACTURE.LFDJOU, LFACTURE.LFHEURE) BETWEEN '20230301170000' AND '20230302053512'


Seulement cette solution est peu performante à cause du CONCAT

De plus, impossible de passé directement une date formaté ISO. Je ne comprends pas pourquoi d'ailleurs.

Même mon nouvel ami ChatGPT est incapable de me donner une solution correcte..

Est-ce que l'un de vous aurai une idée de comment optimiser / corriger cette requête ?

Et par la même occasion m'expliquer pourquoi est-ce si compliquer de faire des opérations sur des dates avec HFSQL

PS: contrainte supplémentaire, je ne peux pas modifier la base de données : ajouter des index, modifier des types, etc...

Merci d'avance :)
Membre enregistré
112 messages
Popularité : +1 (1 vote)
Posté le 07 avril 2023 - 12:42
Bonjour,

Un truc comme ça, ça irait mieux en vitesse ?

Dans un case
Prendre celles du 1er jour si supérieures à une heure
Prendre celles > 1er jour and < denier jour
Prendre celles du dernier jour si inférieures à une heure
Membre enregistré
187 messages
Posté le 16 mai 2023 - 10:06
Bonjour

Avez vous pensé à utiliser des clés composées dans votre fichier, que vous employez ensuite dans votre requête ?

Cordialement
Jean-Claude FLAJOULOT
Posté le 05 juillet 2023 - 13:52
Bonjour,

Je comprends que vous rencontrez des difficultés avec une requête SQL impliquant des dates et des heures, et que vous souhaitez récupérer les lignes comprises entre deux dates précises. Je vais vous proposer une alternative à votre requête actuelle en utilisant des opérations sur les dates.

SELECT LFACTURE.LFFFCLEUNIK AS ID
FROM LFACTURE
WHERE LFACTURE.LFDJOU + LFACTURE.LFHEURE BETWEEN '2023-03-01T17:00:00' AND '2023-03-02T05:35:12'

Cette requête utilise l'opération d'addition pour concaténer la date et l'heure. Les valeurs de type Date et Heure sont simplement ajoutées, ce qui permet de comparer les résultats directement avec des dates au format ISO ('YYYY-MM-DDTHH:MM:SS'). Assurez-vous que les formats de date et d'heure dans votre base de données correspondent à ce format ISO pour que la comparaison fonctionne correctement.

En ce qui concerne la complexité des opérations sur les dates avec HFSQL, cela peut varier en fonction des limitations ou des particularités du système de gestion de base de données que vous utilisez. Certaines bases de données offrent des fonctions et des opérateurs plus avancés pour manipuler les dates, mais HFSQL peut avoir ses propres limitations ou exigences.

Si vous ne pouvez pas modifier la base de données pour améliorer les performances ou apporter des modifications au schéma, il est recommandé de travailler avec les fonctionnalités et les opérateurs disponibles dans HFSQL pour obtenir les résultats souhaités.

J'espère que cette alternative à votre requête actuelle vous sera utile. Si vous avez d'autres questions, n'hésitez pas à demander.