Mysql
 sql >> база данни >  >> RDS >> Mysql

Mysql Ден на година през високосна година

Където NOW() е невисокосна година 2011 , проблемът възниква от това, че всеки, роден през високосна година след 29 февруари, ще има допълнителен ден, защото използвате DAYOFYEAR срещу годината на раждане.

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

Къде правите DAYOFYEAR , трябва датата на раждане от текущата година, а не годината на раждане.

Така че вместо:

DAYOFYEAR(e.birthdate)

Можете да го преобразувате в тази година по следния начин:

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

Което преобразува рождена дата на:

'2004-04-01'

До:

'2011-04-01'

И така, ето променената заявка:

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

Хората, родени на 29 февруари, ще паднат на 1 март в невисокосни години, което все още е ден 60 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Полиморфна структура на таблицата на базата данни на SQL

  2. SQLException:методът executeQuery не може да се използва за актуализиране

  3. PATINDEX() замяна в MYSQL

  4. Как да се свържете с база данни с помощта на NaviCat MySQL клиент

  5. Как да поправите MySQL JDBC 08001 грешка при свързване с база данни