Mysql 选择是否,离生日的天数

Mysql 选择是否,离生日的天数,mysql,if-statement,case,datediff,Mysql,If Statement,Case,Datediff,我最近开始学习MySQL,我需要使用SELECTIF编写一个查询。目标是显示表中每个人的生日截止日期 到目前为止,我有以下代码: select datediff(date(concat(year(now()), '-', month(Person.Birthday), '-', day(Person.Birthday))),now()) as 'Days to Birthday' from Person where datediff( date(concat(year(now()), '-',m

我最近开始学习MySQL,我需要使用SELECTIF编写一个查询。目标是显示表中每个人的生日截止日期

到目前为止,我有以下代码:

select datediff(date(concat(year(now()), '-', month(Person.Birthday), '-', day(Person.Birthday))),now()) as 'Days to Birthday'
from Person
where datediff(
date(concat(year(now()), '-',month(Person.Birthday), '-',
day(Person.Birthday))),now()) >= 0;
到目前为止还不错。这是可行的,我也有一个结果<0的版本

如何将这些行集成到select if语句中?过去两天我一直在努力,但没有成功

另外,我尝试使用case和where得到一个结果,但我也没有运气


如果有人能提供解决方案,我会很高兴

你必须用两种方法计算到生日的剩余天数

在生日即将来临的那一年 下一年的生日刚刚过去,明年就要到了。 如果天数从1开始小于零,则表示生日已经过了,需要考虑明年计算天数。以下是查询:

SELECT z.birthday, IF(z.less_days >=0 , z.less_days, z.more_days) AS 'Days to Birthday'
FROM 
(
   SELECT birthday,
   datediff(date(concat(year(now()), '-', month(Person.Birthday), '-', day(Person.Birthday))),now()) as less_days,
   datediff(date(concat(year(now())+1, '-', month(Person.Birthday), '-', day(Person.Birthday))),now()) as more_days
   FROM Person
 ) AS z
注意:我使用外部查询消除了在IF条件返回“true”时重新计算天数的需要

考虑到当前日期为2021年5月16日,输出将为

birthday    Days to Birthday
----------------------------
2001-06-01        16
2002-07-20        65
2003-05-01        350
2004-05-16        0
2004-05-15        364

您希望通过SELECT语句中的IF条件实现什么?请分享您的预期输出。您好,不确定我是否理解正确-我的目标是显示下一个生日的日期。我想在一个查询中找到两种可能性:1生日已经结束,我想知道下一年B日之前的日子2生日将是今年。希望这能回答你的问题。选择if是什么意思?没有这样的事。我是说,如果你很棒,这很有效,非常感谢!很乐意帮忙!我建议您在提问时提供示例输出,以便so的成员能够更好更快地帮助您。