Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mysql Dayofyear di tahun kabisat

Dimana NOW() adalah tahun non-kabisat 2011 , masalah muncul dari siapa pun yang lahir pada tahun kabisat setelah 29 Februari akan memiliki satu hari ekstra karena Anda menggunakan DAYOFYEAR terhadap tahun lahir.

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

Di mana Anda melakukan DAYOFYEAR , Anda memerlukan tanggal lahir dari tahun ini, bukan tahun lahir.

Jadi, alih-alih:

DAYOFYEAR(e.birthdate)

Anda dapat mengubahnya menjadi tahun ini seperti ini:

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

Yang mengubah tanggal lahir:

'2004-04-01'

Kepada:

'2011-04-01'

Jadi, inilah kueri yang dimodifikasi:

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

Orang yang lahir pada tanggal 29 Februari akan jatuh pada tanggal 1 Maret pada tahun non-kabisat, yaitu masih hari 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. MySQL GROUP oleh Regex?

  2. Struktur database MySql untuk :Cari berdasarkan kolom tunggal dan nilai yang berbeda

  3. Daftar tag SQL dan pemfilteran tag

  4. Cara Menghapus Pengguna Database MySQL di cPanel

  5. mysql - perlu dua batasan?