Ma requête devant récupérer les événements entre 2 dates de recherche ne retourne aucun résultat, pourquoi ?

a marqué ce sujet comme résolu.

Bien le bonsoir très chères clémentines,

J’ai modélisé en base un calendrier. Les entrées sont : les événements de ce calendrier. Voici une entrée :

id ; event_creation_date ; event_end_date 11 ; 2021-01-28 15:15:37 ; 2022-01-11 15:15:37

J’ai mis en place un script qui accepte en entrées : une date de recherche d’événements "search_creation_date" et une date de recherche d’événements "search_end_date". Ce script doit retourner tous les événements qui sont totalement encadrés dans cet intervalle de recherche, ou encore ceux qui sont en partie encadrés (que ce soit parce que l’intervalle de recherche est totalement encadré par l’intervalle de ces événements, ou encore parce qu’une date de recherche est encadrée par l’intervalle de ces événements).

J’ai donc écrit cette requête :

select *, @search_creation_date:="2021-01-26 00:00:00", @search_end_date:="2021-01-30 00:00:00" 

from `calendars_events`

where

(@search_creation_date between `event_creation_date` and `event_end_date`) or (@search_end_date between `event_creation_date` and `event_end_date`) 

or

(`event_creation_date` between @search_creation_date and @search_end_date) or (`event_end_date` between @search_creation_date and @search_end_date)

Ici la date de création de recherche est en-dehors de l’intervalle de l’événement, mais la date de fin de recherche est bien comprise dans l’intervalle de l’événement. Donc l’événement #11 devrait bien être retourné. Pourtant le résultat de la requête est vide.

Je ne comprends pas pourquoi. J’ai bien vérifié comment MySQL utilise les variables ainsi que la comparaison de date avec between et tout me semble correct.

Qu’est-ce qui ne va pas ? Merci bonne soirée :)

+0 -0

Vu de l’extérieur, puisque je ne pratique pas du tout MySQL.

Le début : select @search_creation_date = "2021.." fait que search_creation_date est une chaine de caractère, et du coup, j’utiliserais to_char () pour convertir les dates au moment de tester si les dates conviennent.

En mettant bien sûr les bons paramètres pour to_char.

Ou sinon : select @search_creation_date = to_date("2021.." )

Aucune garantie de résultat.

Vu de l’extérieur, puisque je ne pratique pas du tout MySQL.

Le début : select @search_creation_date = "2021.." fait que search_creation_date est une chaine de caractère, et du coup, j’utiliserais to_char () pour convertir les dates au moment de tester si les dates conviennent.

En mettant bien sûr les bons paramètres pour to_char.

Ou sinon : select @search_creation_date = to_date("2021.." )

Aucune garantie de résultat.

elegance

Salut !

merci bien pour ta réponse ; effectivement non aucun pb syntaxique, sémantique, de format, etc. au niveau de l’utilisation des valeurs de date. Je sais ce qui n’allait pas, je repasse ce soir pour poster les explications et la solution, puis je passe en résolu (pas le temps tout de suite)

+0 -0

Bonsoir, Je pense que l’ordre d’exécution d’une requête SQL exécute d’abord la clause WHERE avant la close SELECT. Lorsque ta clause WHERE est exécutée tes variables @search_creation_date et @search_end_date ne sont pas encore initialisées donc impossible d’avoir un quelconque interval ici.

Tu dois définir tes variables dans un premier temps (avec une requête préalable) ou dans une clause qui s’execute avec la clause WHERE, par exemple dans la clause FROM.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte