Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL:Gdzie między dwiema datami bez roku?

Najlepszym sposobem myślenia o tym problemie jest przekonwertowanie dat na liczbę od 0 do 365, odpowiadającą dniu w roku. Następnie po prostu wybierając daty, w których różnica jest mniejsza niż 14, otrzymujesz dwutygodniowe okno.

To się załamie na początku lub pod koniec roku. Ale prosta arytmetyka modularna daje odpowiedź.

Na szczęście MySQL ma DAYOFYEAR(date) , więc nie jest to takie skomplikowane:

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

Te dodatkowe + 365 jest to potrzebne, ponieważ MOD MySQL zwróci liczby ujemne.

Ta odpowiedź nie uwzględnia prawidłowo lat przestępnych. Jeśli bieżący rok nie jest rokiem przestępnym, a aktualny dzień przypada w ciągu 14 dni od końca roku, przegapisz jeden dzień w styczniu, który powinieneś uwzględnić. Jeśli Ci na tym zależy, powinieneś wymienić 365 z [the number of days in the year - 1 ].



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pokazuje � zamiast £

  2. Powrót do bazy danych Błąd upuszczania bazy danych errno:66 w MySQL

  3. Domyślny czas daty i godziny MySQL z interwałem

  4. plik nie ładuje się w ajax php mysql

  5. Odmowa dostępu dla użytkownika 'root'@'localhost' (przy użyciu hasła:Tak) po zresetowaniu hasła LINUX