在以下查询中,不考虑闰年.
SELECT e.id,
e.title,
e.birthdate
FROM employers e
WHERE DAYOFYEAR(curdate()) <= DAYOFYEAR(e.birthdate)
AND DAYOFYEAR(curdate()) +14 >= DAYOFYEAR(e.birthdate)
Run Code Online (Sandbox Code Playgroud)
因此,在这个查询中,出生在闰年的人的出生日期在非闰年中有不同的一年.
如何调整查询以确保它在闰年中也能正常工作?
我拥有的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
Run Code Online (Sandbox Code Playgroud)
如果你这样做DAYOFYEAR
,你需要从当年开始,而不是出生年份.
所以,而不是:
DAYOFYEAR(e.birthdate)
Run Code Online (Sandbox Code Playgroud)
你可以像这样把它转换成今年:
DAYOFYEAR(DATE_ADD(e.birthdate, INTERVAL (YEAR(NOW()) - YEAR(e.birthdate)) YEAR))
Run Code Online (Sandbox Code Playgroud)
哪个转换出生日期:
'2004-04-01'
Run Code Online (Sandbox Code Playgroud)
至:
'2011-04-01'
Run Code Online (Sandbox Code Playgroud)
所以,这是修改后的查询:
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))
Run Code Online (Sandbox Code Playgroud)
2月29日出生的人将在3月1日的非闰年落下,这仍然是一天60
.
归档时间: |
|
查看次数: |
4435 次 |
最近记录: |