遇到一个需求需要查询近两个月所有日期,如下图:
首先实现解决问题如何获取两个日期所有日期,可以通过以下sql实现功能:
SELECT
date_sub('2022-07-06',interval ( @i := @i - 1 ) day) as days
from mysql.help_topic
join (select @i:=1) c
where help_topic_id <= (TIMESTAMPDIFF(day,'2022-07-06','2022-09-06'))
在解决核心问题后,现在获取两个月前当前日期:
所以这个地方用到了,类
select DATE_ADD(NOW(), interval 1 MONTH) //NOW()此处必须为时间格式
————————————————————————
date_add() 增加
date_sub()减少
————————————————————
month 月份
minute 分钟
second 秒
得到以下函数今天日期和两个月后当前日期,再把她们结合在最开始两个时间段中可以得到最终sql,获取近两个月所有日期。
select curdate(); //获取今天
select date_sub(curdate(), interval 2 MONTH); //获取两个月后当前日期
SELECT
date_sub(date_sub(curdate(), interval 2 MONTH),interval ( @i := @i - 1 ) day) as days
from mysql.help_topic
join (select @i:=1) c
where help_topic_id <= (TIMESTAMPDIFF(day,date_sub(curdate(), interval 2 MONTH),curdate()))
同理可以实现其他功能,例如查询本年所有月份:
SELECT DATE_FORMAT(DATE_ADD(CONCAT(YEAR(DATE(NOW())),'-01-01'),INTERVAL (CAST( help_topic_id AS SIGNED )) MONTH ),'%Y-%m') months
FROM mysql.help_topic
WHERE help_topic_id < 12 ORDER BY months ASC