Mysql如何查询出两个日期之间的所有日期?

问题:

有时我们在生成一些时间轴类似的数据时,要求数据库不管有没有指定天的数据,都要生成该时间节点,可用mysql.help_topic来解决此类问题,通过序列和日期函数相结合来满足我们的业务需求。

例如:查询2023-05-13与2023-07-13之间的所有日期。

#查询两个日期之间的所有日期
SELECT DATE_FORMAT( DATE_ADD(CONCAT('2023-05-13'), INTERVAL(help_topic_id) DAY),'%Y-%m-%d')  DATA_DATE
FROM mysql.help_topic
WHERE help_topic_id  <=  TIMESTAMPDIFF(DAY,CONCAT('2023-05-13'),CONCAT('2023-07-13'))
ORDER BY DATA_DATE

可以利用 mysql.help_topic 系统表中的 help_topic_id 字段值。其中help_topic本身是Mysql一个帮助解释注释表,用于解释Mysql各种专有名词,由于这张表数据ID是从0顺序增加的,方便我们用于计数,但是有最大值,一旦超过这个数字,我们就需要己自定义一张表。

以上SQL执行情况如下:

Mysql如何查询出两个日期之间的所有日期?_第1张图片

另附其它日期处理的方法:

本周,本月,本季度,本年的第一天和最后一天 

#查询本周第一天
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE()) DAY) AS TIME

#查询本周的最后一天
SELECT DATE_SUB(CURDATE(),INTERVAL WEEKDAY(CURDATE())-6 DAY) AS TIME

#查询本月的第一天
SELECT DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY) AS TIME

#查询本月的最后一天
SELECT LAST_DAY(CURDATE()) AS TIME

#当前quarter的第一天:  
select concat(date_format(LAST_DAY(MAKEDATE(EXTRACT(YEAR FROM  CURDATE()),1) + interval QUARTER(CURDATE())*3-3 month),'%Y-%m-'),'01'); 
 
#当前quarter的最后一天:  
select LAST_DAY(MAKEDATE(EXTRACT(YEAR  FROM CURDATE()),1) + interval QUARTER(CURDATE())*3-1 month);

#当年第一天:
SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY);
 
#当年最后一天:
SELECT concat(YEAR(now()),'-12-31'); 

新增一个星期,一个月,一个季度,一年

#新增一个星期
SELECT DATE_ADD(now(), INTERVAL 1 week) time

#新增一个月
SELECT DATE_ADD(now(), INTERVAL 1 month) time

#新增一个季度
SELECT DATE_ADD(now(), INTERVAL 1 quarter) time

#新增一年
SELECT DATE_ADD(now(), INTERVAL 1 year) time

你可能感兴趣的:(mysql,数据库,sql)