我试图基于DOB在MySQL中查找日期的下一个实例-例如,如果DOB是1975-12-20,而我们今天正在运行,则下一个生日是2020-12-20。
如果DOB是1975-12-19,则下一个生日是2020-12-19,但是如果DOB是1975-12-21,则下一个生日是2019-12-21。
我可以在PHP中通过分解日期并替换年份来做到这一点,但是我想在MySQL中尝试这样做,因为这样可以更快地运行等
DOB是日期字段的注册者
我发现How to calculate next birthday given a date of birth?用于Postgressql,我认为它可以工作,但是它使用了一个名为age的函数,在MySQL中似乎不起作用
答案 0 :(得分:0)
您可以按以下方式进行日期算术:
dob
+ interval (
year(curdate())
- year(dob)
+ (dayofyear(curdate()) > dayofyear(dob))
) year
基本上,这将取当前日期和出生年份之间的差,如果当前年份的生日在过去,则加1。这样,您就可以添加到下一个生日的年数。
到2月29日时,上述表达式将在非-年返回2月28日。
答案 1 :(得分:0)
创建一个带有示例数据的小提琴,并进行查询以获取下一个生日日期。下面的共享是查询和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 TableName
答案 2 :(得分:0)
也许是这样。本年度。
select DATE_ADD(dob, INTERVAL TIMESTAMPDIFF(year, dob, now()) + (dayofyear(dob) > dayofyear(now())) YEAR) as result
在沙箱中 https://paiza.io/projects/iCDmx0RP1jck56xXzGu2Jw?language=mysql