J'écris actuellement une application Delphi qui exécute des requêtes sur une base de données DB2 à l'aide d'ADO. L'une des conditions est que l'utilisateur puisse définir des requêtes en utilisant des dates, par exemple "montrez-moi toutes les données des 60 derniers jours" ou "montrez-moi toutes les données entre le 20 novembre 2009 et le 18 janvier 2010". Ce ne serait pas un problème, sauf pour deux faits:Algorithme d'intervalle de dates SQL
- Les dates sont stockées dans la base de données en utilisant différents champs pour le jour, le mois et l'année.
- Les bases de données sont utilisées depuis plusieurs années sur plusieurs sites clients et ne peuvent pas être modifiées. L'application doit donc être exécutée sur les bases de données existantes (pas de modification de la base de données pour stocker les dates). la tâche beaucoup plus simple).
Ce que je dois savoir, c'est s'il existe un algorithme efficace pour construire le SQL requis pour extraire les informations spécifiées de la base de données. Par exemple, aujourd'hui est le 18 Janvier, afin d'extraire toutes les informations du 20 Novembre à aujourd'hui, je besoin d'une instruction SQL qui ressemble à ceci:
SELECT data WHERE
((day >= 20) AND (month = 11) AND (year = 2009)) OR
((month = 12) AND (year = 2009)) OR
((day <= 18) AND (month = 1) AND (year = 2010))
Évidemment, cela est un exemple trivial et relativement simple, mais si l'utilisateur voulait récupérer des données à partir de novembre 2008 au lieu de 2009, la requête serait beaucoup plus grande.
Est-ce la seule façon de construire l'instruction SQL, ou existe-t-il un moyen plus efficace de le faire?
Vous ne pouvez pas ajouter une vue pour convertir les parties de date en un objet de date unique et interroger la vue? –