formulaire de recherche par date ou intervalle de date

Retour

Problème :

On crée un formulaire pour filtrer une table de la base de donnée.
voici les cas selon le nombre de champs

1)
dans le formulaire ":date"
dans la base "date"
matching exact

date = :date

2)
dans le formulaire ":date"
dans la base : "start" et "end"
date recherché incluse dans l'intervalle

start <= :date and end >= :date

3)
dans le formulaire ":date"
dans la base : "start" et "end" nullable
date recherché incluse dans l'intervalle

start <= :date and (end >= :date or end is null)

4)
dans le formulaire ":start" et ":end"
dans la base : "date"
intervalle simple

date >= :start and date <= :end

5)
dans le formulaire ":start" et ":end"
dans la base : "start" et "end"
on souhaite obtenir les resultats qui sont à cheval ou inclu ou englobant les dates choisies.

start <= :end and end >= :start

6)
dans le formulaire ":start" et ":end" nullable
dans la base : "start" et "end" nullable
on souhaite obtenir les resultats qui sont à cheval ou inclu ou englobant les dates choisies.

(
    ( end IS NULL AND (date(:end) >= date(start) OR :end IS NULL) )
    OR
    (
       end IS NOT NULL AND (
          ( :end IS NOT NULL AND (date(:start) <= date(end) AND date(:end) >= date(start)) )
          OR
          ( :end IS NULL AND date(:start) <= date(end) )
       )
    )
)