sql >> Database teknologi >  >> RDS >> Mysql

SQL:Hvor mellem to datoer uden år?

Den bedste måde at tænke på dette problem er at konvertere dine datoer til et tal mellem 0 og 365 svarende til dagen i året. Så blot at vælge datoer, hvor denne forskel er mindre end 14, giver dig dit to ugers vindue.

Det vil bryde sammen i begyndelsen eller slutningen af ​​året. Men simpel modulær aritmetik giver dig svaret.

Heldigvis har MySQL DAYOFYEAR(date) , så det er ikke så kompliceret:

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 ekstra + 365 er nødvendig, da MySQL's MOD vil returnere negative tal.

Dette svar tager ikke korrekt højde for skudår. Hvis det aktuelle år ikke er et skudår, og datoen er inden for 14 dage efter årets udgang, går du glip af en dag i januar, som du burde have inkluderet. Hvis du bekymrer dig om det, bør du erstatte 365 med [the number of days in the year - 1 ].



  1. MySQL vælg sætning med CASE eller IF ELSEIF? Ikke sikker på, hvordan man får resultatet

  2. Bedste måde at lave indlejret case-sætningslogik i SQL Server

  3. Dynamisk overvågning af PostgreSQL-forekomster ved hjælp af pg_top

  4. Varchar-problem på Mysql 2147483647