sql >> Base de Datos >  >> RDS >> Mysql

SQL:¿Dónde entre dos fechas sin año?

La mejor manera de pensar en este problema es convertir las fechas en un número entre 0 y 365 correspondiente al día del año. Luego, simplemente seleccionando fechas en las que esta diferencia sea inferior a 14, obtendrá su ventana de dos semanas.

Eso se romperá al principio o al final del año. Pero la aritmética modular simple te da la respuesta.

Afortunadamente, MySQL tiene DAYOFYEAR(date) , así que no es tan 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

Ese + 365 adicional es necesario ya que el MOD de MySQL devolverá números negativos.

Esta respuesta no tiene en cuenta los años bisiestos correctamente. Si el año actual no es un año bisiesto y la fecha actual está dentro de los 14 días posteriores al final del año, perderá un día en enero que debería haber incluido. Si te importa eso, entonces deberías reemplazar 365 con [the number of days in the year - 1 ].