sql >> Database >  >> RDS >> Mysql

SQL:Waar tussen twee datums zonder jaartal?

De beste manier om aan dit probleem te denken, is door uw datums om te zetten in een getal tussen 0 en 365 dat overeenkomt met de dag in het jaar. Als u vervolgens datums kiest waarop dit verschil minder dan 14 is, krijgt u een venster van twee weken.

Die gaat aan het begin of het einde van het jaar stuk. Maar eenvoudige modulaire rekenkunde geeft je het antwoord.

Gelukkig heeft MySQL DAYOFYEAR(date) , dus het is niet zo ingewikkeld:

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

Die extra + 365 is nodig omdat de MOD van MySQL negatieve getallen retourneert.

Dit antwoord houdt geen correct rekening met schrikkeljaren. Als het huidige jaar geen schrikkeljaar is en de datum valt binnen 14 dagen na het einde van het jaar, dan mis je een dag in januari die je had moeten opnemen. Als je daar om geeft, vervang dan 365 met [the number of days in the year - 1 ].



  1. Codeigniter:Fout in ORDER BY CASE-query

  2. mysqldump-tabel zonder de primaire sleutel te dumpen

  3. Hoe controleer ik het maximum aantal toegestane verbindingen met een Oracle-database?

  4. Postgres-functie die tabel retourneert en geen gegevens in kolommen retourneert