sql >> Database teknologi >  >> RDS >> Mysql

Mysql Dayofyear i skudår

Hvor NOW() er et ikke-skudår 2011 , skyldes problemet, at enhver, der er født et skudår efter den 29. februar, vil have en ekstra dag, fordi du bruger DAYOFYEAR mod fødselsåret.

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

Hvor du gør DAYOFYEAR , skal du bruge fødselsdatoen fra det aktuelle år, ikke fødselsåret.

Så i stedet for:

DAYOFYEAR(e.birthdate)

Du kan konvertere det til i år på denne måde:

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

Hvilket konverterer en fødselsdato på:

'2004-04-01'

Til:

'2011-04-01'

Så her er den ændrede forespørgsel:

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ødt den 29. februar falder den 1. marts i ikke-skudår, hvilket stadig er dag 60 .



  1. MySQL - FEJL 1045 - Adgang nægtet

  2. MySQL Left Join + Min

  3. mysql_connect (localhost / 127.0.0.1) langsom på Windows-platformen

  4. Sådan deaktiveres en CHECK-begrænsning i SQL Server (T-SQL-eksempler)