首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL获取出生日期/生日的下一个实例

问MySQL获取出生日期/生日的下一个实例
EN

Stack Overflow用户
提问于 2019-12-20 18:34:36
回答 3查看 75关注 0票数 0

我正在尝试在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中不起作用

EN

回答 3

Stack Overflow用户

发布于 2019-12-20 18:47:42

您可以按如下方式进行日期运算:

代码语言:javascript
复制
dob
+ interval (
    year(curdate()) 
    - year(dob) 
    + (dayofyear(curdate()) > dayofyear(dob))
) year

基本上,这取当前日期和出生年份之间的差值,如果当前年份的生日是过去的,则加1。这给了你在道布的基础上加多少年才能过下一个生日。

当涉及到2月29日时,上面的表达式将返回非闰年的2月28日。

票数 0
EN

Stack Overflow用户

发布于 2019-12-20 18:52:07

创建了一个处理样本数据和查询以获取下一个生日日期的方法。下面的分享是查询和sql字段链接:

代码语言:javascript
复制
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 fiddle:http://sqlfiddle.com/#!9/033ad4/18

票数 0
EN

Stack Overflow用户

发布于 2019-12-20 19:09:33

也许走这条路。本年度的。

代码语言:javascript
复制
select DATE_ADD(dob, INTERVAL TIMESTAMPDIFF(year, dob, now()) + (dayofyear(dob) > dayofyear(now())) YEAR) as result

在沙盒https://paiza.io/projects/iCDmx0RP1jck56xXzGu2Jw?language=mysql中

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59423789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档