sql >> Databáze >  >> RDS >> Mysql

Mysql Dayofyear v přestupném roce

Kde NOW() je nepřestupný rok 2011 , problém vzniká tak, že kdokoli narozený v přestupném roce po 29. únoru bude mít o den navíc, protože používáte DAYOFYEAR proti roku narození.

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

Kde děláte DAYOFYEAR , potřebujete datum narození z aktuálního roku, nikoli rok narození.

Takže místo:

DAYOFYEAR(e.birthdate)

Na letošní rok to můžete převést takto:

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

Což převede datum narození:

'2004-04-01'

Komu:

'2011-04-01'

Takže zde je upravený dotaz:

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

Lidé narození 29. února připadnou na 1. březen v nepřestupném roce, což je stále den 60 .



  1. kde 1=1 výrok

  2. přidání balíčku RMySQL do R se nezdaří (ve Windows)?

  3. Převeďte VARCHAR2 na číslo

  4. lokální typy kolekcí nejsou povoleny v příkazech SQL