首先获取今年和来年的生日日期,今年生日过了则计算下一年生日距离今天多少天;mysql默认没有29号时取28号。
EG:客户表customer_info 查询生日倒计时N天内生日提醒
SELECT * from (
SELECT
c.name,
c.sex,
birthday,
-- (YEAR (now()) - YEAR (BIRTHDAY)) age,-- 年龄(周岁)
-- date_format(now(), '%Y-%m-%d') today,-- 今天
-- date_add(BIRTHDAY, INTERVAL (YEAR (now()) - YEAR (BIRTHDAY)) YEAR) cur,-- 今年生日日期
-- date_add(birthday,INTERVAL (YEAR (now()) - YEAR (c.birthday)) + 1 YEAR) next,-- 第二年生日日期
datediff(
-- 今年的生日是否已过 IF (cur >= today, cur, next)
IF ( date_add(birthday, INTERVAL (YEAR (now()) - YEAR (c.birthday)) YEAR) >= date_format(now(), '%Y-%m-%d'), date_add(birthday, INTERVAL (YEAR (now()) - YEAR (c.birthday)) YEAR), date_add(birthday,INTERVAL (YEAR (now()) - YEAR (c.birthday)) + 1 YEAR) ),
date_format(now(), '%Y-%m-%d')
) countDownDays
FROM
customer_info c
where tenant_user_code='test'
)a where a.countDownDays <=N
ORDER BY a.countDownDays ASC
eg:当前日期是2022-11-21