Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL :Où entre deux dates sans année ?

La meilleure façon de penser à ce problème est de convertir vos dates en un nombre compris entre 0 et 365 correspondant au jour de l'année. Ensuite, le simple fait de choisir des dates où cette différence est inférieure à 14 vous donne votre fenêtre de deux semaines.

Cela s'effondrera en début ou en fin d'année. Mais une simple arithmétique modulaire vous donne la réponse.

Heureusement, MySQL a DAYOFYEAR(date) , donc ce n'est pas si compliqué :

SELECT * FROM tbl t
WHERE 
  MOD(DAYOFYEAR(currdate) - DAYOFYEAR(t.the_date) + 365, 365) <= 14
  OR MOD(DAYOFYEAR(t.the_date) - DAYOFYEAR(currdate) + 365, 365) <= 14

Ce supplément + 365 est nécessaire car le MOD de MySQL renverra des nombres négatifs.

Cette réponse ne tient pas compte correctement des années bissextiles. Si l'année en cours n'est pas une année bissextile et que la date de clôture se situe dans les 14 jours suivant la fin de l'année, vous manquerez un jour de janvier que vous auriez dû inclure. Si cela vous intéresse, vous devez remplacer 365 avec [the number of days in the year - 1 ].