sql >> Databáze >  >> RDS >> Mysql

SQL:Kde mezi dvěma daty bez roku?

Nejlepší způsob, jak tento problém vyřešit, je převést data na číslo mezi 0 a 365 odpovídající dni v roce. Pak jednoduše vyberete data, kde je tento rozdíl menší než 14, a získáte tak dvoutýdenní okno.

To se na začátku nebo na konci roku zlomí. Ale jednoduchá modulární aritmetika vám dá odpověď.

Naštěstí má MySQL DAYOFYEAR(date) , takže to není tak složité:

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

To extra + 365 je potřeba, protože MOD MySQL vrátí záporná čísla.

Tato odpověď nezohledňuje správně přestupné roky. Pokud aktuální rok není přestupným rokem a aktuální datum je do 14 dnů od konce roku, pak zmeškáte jeden den v lednu, který jste měli zahrnout. Pokud vám na tom záleží, měli byste nahradit 365 s [the number of days in the year - 1 ].



  1. 15 Základní otázky k rozhovoru s MySQL pro správce databází

  2. Udržování seskupeného běhu MAX (nebo MIN)

  3. MySQL:získat velký výběr po kouscích

  4. SELECT max(x) vrací hodnotu null; jak mohu dosáhnout toho, aby vrátil 0?