Select 如果,距离生日还有几天

Select if, days to birthday

我最近开始学习 MySQL,我需要使用 select if 编写一个查询。目标是显示 table.

中每个人的生日日期

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

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. 生日临近的年份
  2. 下一年的生日刚过,明年就要到了。

如果#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 条件 returns '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

Working Fiddle