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 的天数小于零,则意味着生日已经过去,需要考虑明年来计算天数。下面是查询:
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
我最近开始学习 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 的天数小于零,则意味着生日已经过去,需要考虑明年来计算天数。下面是查询:
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