我正在尝试在MySQL中查找基于道布的日期的下一个实例-例如,如果道布是1975-12-20,而我们今天运行它,那么下一个生日就是2020-12-20。
同样,如果道布是1975-12-19,那么下一个生日是2020-12-19,但是如果道布是1975-12-21,那么下一个生日是2019-12-21。
我可以在PHP中通过分解日期和替换年份来做到这一点,但我想尝试在MySQL中这样做,因为它运行起来会更快,等等。
道布是日期字段0000-00-00
我找到了postgressql的How to calculate next birthday given a date of birth?,我认为它可以工作,但它使用了一个名为age的函数,该函数似乎在MySQL中不起作用
发布于 2019-12-20 18:47:42
您可以按如下方式进行日期运算:
dob
+ interval (
year(curdate())
- year(dob)
+ (dayofyear(curdate()) > dayofyear(dob))
) year基本上,这取当前日期和出生年份之间的差值,如果当前年份的生日是过去的,则加1。这给了你在道布的基础上加多少年才能过下一个生日。
当涉及到2月29日时,上面的表达式将返回非闰年的2月28日。
发布于 2019-12-20 18:52:07
创建了一个处理样本数据和查询以获取下一个生日日期的方法。下面的分享是查询和sql字段链接:
select *,
IF(month(dob) = month(now()) AND day(dob) > day(now()), concat(Year(now()),'-',month(dob),'-',day(dob)) ,concat(Year(now())+1,'-',month(dob),'-',day(dob))) as nextBirthDay
from TableNameSql fiddle:http://sqlfiddle.com/#!9/033ad4/18
发布于 2019-12-20 19:09:33
也许走这条路。本年度的。
select DATE_ADD(dob, INTERVAL TIMESTAMPDIFF(year, dob, now()) + (dayofyear(dob) > dayofyear(now())) YEAR) as result在沙盒https://paiza.io/projects/iCDmx0RP1jck56xXzGu2Jw?language=mysql中
https://stackoverflow.com/questions/59423789
复制相似问题