Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

SQL:Onde entre duas datas sem ano?


A melhor maneira de pensar nesse problema é converter suas datas para um número entre 0 e 365 correspondente ao dia do ano. Em seguida, basta escolher as datas em que essa diferença é inferior a 14 para obter sua janela de duas semanas.

Isso vai quebrar no início ou no final do ano. Mas a aritmética modular simples lhe dá a resposta.

Felizmente, o MySQL tem DAYOFYEAR(date) , então não é tão complicado:
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

Aquele + 365 extra é necessário, pois o MOD do MySQL retornará números negativos.

Esta resposta não leva em conta os anos bissextos corretamente. Se o ano atual não for bissexto e a data atual estiver dentro de 14 dias do final do ano, você perderá um dia em janeiro que deveria ter incluído. Se você se importa com isso, substitua 365 com [the number of days in the year - 1 ].