Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mysql Dayofyear im Schaltjahr

Wobei NOW() ist ein Nicht-Schaltjahr 2011 , entsteht das Problem dadurch, dass jeder, der in einem Schaltjahr nach dem 29. Februar geboren wurde, einen zusätzlichen Tag hat, weil Sie DAYOFYEAR verwenden gegen das Geburtsjahr.

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

Wo Sie DAYOFYEAR machen , benötigen Sie das Geburtsdatum aus dem laufenden Jahr, nicht das Geburtsjahr.

Also statt:

DAYOFYEAR(e.birthdate)

Sie können es wie folgt in dieses Jahr umwandeln:

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

Welches konvertiert ein Geburtsdatum von:

'2004-04-01'

An:

'2011-04-01'

Also, hier ist die modifizierte Abfrage:

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))

Menschen, die am 29. Februar geboren sind, fallen in Nicht-Schaltjahren auf den 1. März, was immer noch Tag 60 ist .