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

Mysql Dayofyear w roku przestępnym

Gdzie NOW() nie jest rokiem przestępnym 2011 , problem wynika z tego, że każdy urodzony rok przestępny po 29 lutego będzie miał dodatkowy dzień, ponieważ używasz DAYOFYEAR w stosunku do roku urodzenia.

DAYOFYEAR('2004-04-01') // DAYOFYEAR(e.birthdate) Returns 92
DAYOFYEAR('2011-04-01') // DAYOFYEAR(NOW()) Returns 91

Gdzie robisz DAYOFYEAR , potrzebujesz daty urodzenia z bieżącego roku, a nie z roku urodzenia.

Więc zamiast:

DAYOFYEAR(e.birthdate)

Możesz go przekonwertować na ten rok w ten sposób:

DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthdate)) YEAR))

Który konwertuje datę urodzenia:

'2004-04-01'

Do:

'2011-04-01'

Oto zmodyfikowane zapytanie:

SELECT      e.id,
             e.title,
             e.birthdate
 FROM        employers e
 WHERE       DAYOFYEAR(curdate()) <= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR))
 AND         DAYOFYEAR(curdate()) +14 >= DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthday)) YEAR))

Osoby urodzone 29 lutego upadną 1 marca w roku innym niż przestępny, czyli nadal jest dniem 60 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wątki Java i MySQL

  2. Jak uzyskać dostęp do obiektu RowDataPacket?

  3. Dostosowywanie skrótów klawiaturowych w MySql Workbench

  4. Pytasz o ciąg z kolumny int?

  5. Różnica między dwiema datami w MySQL