Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mysql Dayofyear en année bissextile

NOW() est une année non bissextile 2011 , le problème vient du fait que toute personne née une année bissextile après le 29 février aura un jour supplémentaire car vous utilisez DAYOFYEAR par rapport à l'année de naissance.

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

Où vous faites DAYOFYEAR , vous avez besoin de la date de naissance de l'année en cours, pas de l'année de naissance.

Donc, au lieu de :

DAYOFYEAR(e.birthdate)

Vous pouvez le convertir en cette année comme ceci :

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

Ce qui convertit une date de naissance de :

'2004-04-01'

À :

'2011-04-01'

Voici donc la requête modifiée :

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

Les personnes nées le 29 février tomberont le 1er mars des années non bissextiles, qui est toujours le jour 60 .