sql >> Databasteknik >  >> RDS >> Mysql

Mysql Dayofyear under skottår

Där NOW() är ett icke-skottår 2011 , uppstår problemet från att alla som är födda ett skottår efter den 29 februari får en extra dag eftersom du använder DAYOFYEAR mot födelseåret.

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

Där du gör DAYOFYEAR , du behöver födelsedatumet från innevarande år, inte födelseåret.

Så istället för:

DAYOFYEAR(e.birthdate)

Du kan konvertera det till i år så här:

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

Som konverterar ett födelsedatum för:

'2004-04-01'

Till:

'2011-04-01'

Så här är den ändrade frågan:

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

Personer födda den 29 februari kommer att infalla den 1 mars under icke-skottår, vilket fortfarande är dag 60 .



  1. SQL SUM-funktion utan att gruppera data

  2. Skapar DATETIME från DATE och TIME

  3. Visa MySQL-resultat efter datum

  4. mysql fulltextsökning ger inte förväntade resultat