问题: 有时我们在生成一些时间轴类似的数据时,要求数据库不管有没有指定天的数据,都要生成该时间节点,可用Mysql.help_topic来解决此类问题,通过序列和日期函数相结合来满足我们的业务需求。 例如:查询2023-05-13与2023
有时我们在生成一些时间轴类似的数据时,要求数据库不管有没有指定天的数据,都要生成该时间节点,可用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_DATEFROM mysql.help_topicWHERE 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执行情况如下:
#查询本周第一天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
来源地址:https://blog.csdn.net/yxf771hotmail/article/details/131813659
--结束END--
本文标题: Mysql如何查询出两个日期之间的所有日期?
本文链接: https://www.lsjlt.com/news/389583.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-29
2024-04-29
2024-04-29
2024-04-29
2024-04-28
2024-04-28
2024-04-28
2024-04-28
2024-04-28
2024-04-28
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0