SQL实现按照年月查询每天的日期

7 篇文章 0 订阅

使用数据库MySQL

应用场景:通过年月查询出这个月每一天的日期,特别是在报表开发时可以用到,用于显示每天的情况,按月查询

一、梳理思路

1、要按月输出所有的日期,我们就要知道每一天的号数,现在我们要知道每个月最大有31天,我们需要有这样的数据集合;

SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 10 UNION ALL
SELECT 11 UNION ALL
SELECT 12 UNION ALL
SELECT 13 UNION ALL
SELECT 14 UNION ALL
SELECT 15 UNION ALL
SELECT 16 UNION ALL
SELECT 17 UNION ALL
SELECT 18 UNION ALL
SELECT 19 UNION ALL
SELECT 20 UNION ALL
SELECT 21 UNION ALL
SELECT 22 UNION ALL
SELECT 23 UNION ALL
SELECT 24 UNION ALL
SELECT 25 UNION ALL
SELECT 26 UNION ALL
SELECT 27 UNION ALL
SELECT 28 UNION ALL
SELECT 29 UNION ALL
SELECT 30 UNION ALL
SELECT 31 

2、我们要知道每个月有多少天,这样我们就可以控制取的号数了,取的号数是小于等于这个最大号数的;

SELECT DAY ( LAST_DAY( STR_TO_DATE( '2019-10', '%Y-%m' ) ) )

3、当我们知道了上面的两个部分的值,我们就可以这样计算了;
循环取第一个号数的数据集合,数据集合的值小于等于最大号数的值,这个集合就是这个集合的所有号数,我们再去将号数和年月拼接打印就是完整的年月日集合了;

二、完整SQL

SELECT DATE_FORMAT( ADDDATE( Y.YEARMONTH, X.D - 1 ), '%Y-%m-%d' ) NEWDATE
FROM
(SELECT 1 AS D UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9 UNION ALL
SELECT 10 UNION ALL
SELECT 11 UNION ALL
SELECT 12 UNION ALL
SELECT 13 UNION ALL
SELECT 14 UNION ALL
SELECT 15 UNION ALL
SELECT 16 UNION ALL
SELECT 17 UNION ALL
SELECT 18 UNION ALL
SELECT 19 UNION ALL
SELECT 20 UNION ALL
SELECT 21 UNION ALL
SELECT 22 UNION ALL
SELECT 23 UNION ALL
SELECT 24 UNION ALL
SELECT 25 UNION ALL
SELECT 26 UNION ALL
SELECT 27 UNION ALL
SELECT 28 UNION ALL
SELECT 29 UNION ALL
SELECT 30 UNION ALL
SELECT 31 ) X
,(SELECT CONCAT( '2019-10', '-01' ) AS YEARMONTH , DAY ( LAST_DAY( STR_TO_DATE( '2019-10', '%Y-%m' ) ) ) AS LAST) Y
WHERE X.D <= Y.LAST

查询结果如下:
在这里插入图片描述


到这里就完成了按月份周期性查询日期的操作了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值