sql >> Databasteknik >  >> RDS >> Mysql

SQL:Var mellan två datum utan år?

Det bästa sättet att tänka på detta problem är att konvertera dina datum till ett tal mellan 0 och 365 som motsvarar dagen på året. Att sedan helt enkelt välja datum där skillnaden är mindre än 14 ger dig din tvåveckorsperiod.

Det kommer att gå sönder i början eller slutet av året. Men enkel modulär aritmetik ger dig svaret.

Lyckligtvis har MySQL DAYOFYEAR(date) , så det är inte så komplicerat:

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

Den där extra + 365 behövs eftersom MySQL:s MOD kommer att returnera negativa tal.

Detta svar redovisar inte skottår korrekt. Om innevarande år inte är ett skottår och aktuellt datum är inom 14 dagar efter årets slut, missar du en dag i januari som du borde ha inkluderat. Om du bryr dig om det bör du byta ut 365 med [the number of days in the year - 1 ].



  1. Installera Oracle Instant-klienten i Docker-behållaren för Python cx_Oracle

  2. MySQL Query körs men ger undantag

  3. LIKE vs CONTAINS på SQL Server

  4. Konvertera 'datetime' till 'datetime2' i SQL Server (T-SQL-exempel)