MySQL获取下一个生日/生日的实例

时间:2019-12-20 10:34:36

标签: mysql sql date

我试图基于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中似乎不起作用

3 个答案:

答案 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

Sql小提琴:http://sqlfiddle.com/#!9/033ad4/18

答案 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