Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL:Къде между две дати без година?

Най-добрият начин да помислите за този проблем е да преобразувате датите си в число между 0 и 365, съответстващо на деня в годината. След това простото избиране на дати, при които тази разлика е по-малко от 14, ви дава прозореца от две седмици.

Това ще се разпадне в началото или в края на годината. Но простата модулна аритметика ви дава отговора.

За щастие MySQL има DAYOFYEAR(date) , така че не е толкова сложно:

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

Това допълнително + 365 е необходимо, тъй като MOD на MySQL ще върне отрицателни числа.

Този отговор не отчита правилно високосните години. Ако текущата година не е високосна и текущата дата е в рамките на 14 дни от края на годината, тогава ще пропуснете един ден през януари, който трябваше да включите. Ако ви е грижа за това, тогава трябва да замените 365 с [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. Как да избера колона(и) по тяхната числова позиция в таблица?

  2. Изберете всички записи от една таблица, които не съществуват в друга таблица в Laravel 5.1

  3. Задайте резултата от заявка на променлива в MySQL

  4. Как да се свържете с MySQL от командния ред

  5. Проверете за дубликати, преди да поставите