Mysql闰年Dayofyear

标签 mysql leap-year

在下面的查询中不考虑闰年。

 SELECT      e.id,
             e.title,
             e.birthdate
 FROM        employers e
 WHERE       DAYOFYEAR(curdate()) <= DAYOFYEAR(e.birthdate)
 AND         DAYOFYEAR(curdate()) +14 >= DAYOFYEAR(e.birthdate)

所以在这个查询中,闰年出生的人的生日在非闰年有不同的dayofyear。

我如何调整查询以确保它在闰年也能正常工作?

我的mysql版本是:5.0.67

最佳答案

如果 NOW() 是非闰年 2011,问题就出在 2 月 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))

2 月 29 日出生的人将在非闰年的 3 月 1 日,也就是 60 日。

关于Mysql闰年Dayofyear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9703367/

相关文章:

php - MySQL SELECT 记录来自database.table(数据库名称包含 '-' )

c# - 调用 ToUniversalTime().AddYears().ToLocalTime() 的闰年错误?

python - 在python中转换为阿拉伯文文本

MYSQL 使用 where 条件限制特定列值的出现次数

mysql - "order by"在 mysql 中花费太多时间

mysql - 根据 MySQL 中的特定情况查找列的平均长度

sql-server - SQL 服务器 : birthdays on Leap Year

javascript - 我可以同步两个不同年份(闰年)的 highcharts 系列吗

datetime - 自 1800 年 12 月 28 日以来,什么日历似乎可以计算天数?

java - 从闰年计算年数