mysql 获取时间段每一天的日期 不使用数据库表的三种方式

方式一:

SELECT
    a.Date 
FROM
    (
SELECT
    curdate( ) - INTERVAL ( a.a + ( 10 * b.a ) + ( 100 * c.a ) ) DAY AS Date 
FROM
    (
SELECT
    0 AS a UNION ALL
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 
    ) AS a
    CROSS JOIN (
SELECT
    0 AS a UNION ALL
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 
    ) AS b
    CROSS JOIN (
SELECT
    0 AS a UNION ALL
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 
    ) AS c 
    ) a 
WHERE
    a.Date BETWEEN '2019-12-01' 
    AND '2019-12-30'

方式二:


SET @beginDate = '2017-07-01';

SET @maxDate = '2017-07-31';
SELECT
    DATE( @tempDay ),
    @tempDay := DATE_ADD( @tempDay, INTERVAL 1 DAY ) 
FROM
    (SELECT
        a 
    FROM
        ( SELECT '1' AS a UNION SELECT '2' UNION SELECT '3' UNION SELECT '4' UNION SELECT '5' UNION SELECT '6' ) AS a
        JOIN ( SELECT '1' UNION SELECT '2' UNION SELECT '3' UNION SELECT '4' UNION SELECT '5' UNION SELECT '6' ) AS b ON 1 ) f #该表是系统上已存在的一个有比较多数据的表 弄个临时表
    LEFT JOIN ( SELECT @tempDay := @beginDate ) b ON 1 = 1 
WHERE
@tempDay <= @maxDate

 

方式三:

SET @days = TIMESTAMPDIFF( DAY, DATE_ADD( CURDATE(), INTERVAL - 1 MONTH ), CURDATE() )+0;  #表示最近一个月  @days值可以自己定义
SET @number = 1;    
SELECT
    t.datameth AS 'datameths'
FROM
    (
    SELECT
         @number := @number - 1 AS 'numberbvalue',
        ADDDATE( CURDATE(),  @number )  AS 'datameth'
    FROM
        (
        SELECT
            a 
        FROM
            ( SELECT '1' AS a UNION SELECT '2' UNION SELECT '3' UNION SELECT '4' UNION SELECT '5' UNION SELECT '6' ) AS a
            JOIN ( SELECT '1' UNION SELECT '2' UNION SELECT '3' UNION SELECT '4' UNION SELECT '5' UNION SELECT '6' ) AS b ON 1  #里面会自动生成36条数据,也就是类似于一个表。
        ) e 
       WHERE  @number < @days ) t    #  使用到mybatis里面 ‘<’ 要进行转义 &lt;  
    WHERE numberbvalue > 0- @days   #   ‘>’  要进行转义 &gt;
    #如果要查询时候可以使用左连接。
此方式存在一定缺陷 如果是十二月份 会出现三十一天

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值