• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)

    mysql获取一个时间段中所有日期或者月份

    1:mysql获取时间段所有月份

    select DATE_FORMAT(date_add('2020-01-20 00:00:00', interval row MONTH),'%Y-%m') date from
     ( 
        SELECT @row := @row + 1 as row FROM 
        (select 0 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) t,
        (select 0 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) t2, 
        (SELECT @row:=-1) r
     ) se
     where DATE_FORMAT(date_add('2020-01-20 00:00:00', interval row MONTH),'%Y-%m') = DATE_FORMAT('2020-04-02 00:00:00','%Y-%m')

    2:mysql获取时间段所有日期

    select date_add('2020-01-20 00:00:00', interval row DAY) date from
     ( 
        SELECT @row := @row + 1 as row FROM 
        (select 0 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) t,
        (select 0 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) t2, 
        (SELECT @row:=-1) r
     ) se
     where date_add('2020-01-20 00:00:00', interval row DAY) = '2020-03-02 00:00:00'

    备注:

    这段代码表示数据条数限制,写两次查询的日期最多显示100条,写三次查询日期最多显示1000次,以此类推,根据你自己的需求决定

    下面是设置最多显示条数10000写法

    希望能帮助到你,萌新在线求带!!!

    下面是其他网友的补充大家可以参考一下

    1、不使用存储过程,不使用临时表,不使用循环在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 '2017-11-10' and '2017-11-15'

    输出如下

    Date
    ----------
    2017-11-15
    2017-11-14
    2017-11-13
    2017-11-12
    2017-11-11
    2017-11-10

    2、mysql获取两个日期内的所有日期列表

    select @num:=@num+1,date_format(adddate('2015-09-01', INTERVAL @num DAY),'%Y-%m-%d') as date
    from btc_user,(select @num:=0) t where adddate('2015-09-01', INTERVAL @num DAY) = date_format(curdate(),'%Y-%m-%d')
    order by date;

    此方法优点就是不需要创建存储过程或者是日历表,缺点就是你必须要有一个表,它的数据条数大到足够支撑你要查询的天数

    3、mysql获取给定时间段内的所有日期列表(存储过程)

    DELIMITER $$
    DROP PROCEDURE IF EXISTS create_calendar $$
    CREATE PROCEDURE create_calendar (s_date DATE, e_date DATE)
    BEGIN
    -- 生成一个日历表
    SET @createSql = ‘CREATE TABLE IF NOT EXISTS calendar_custom (
    `date` date NOT NULL,
    UNIQUE KEY `unique_date` (`date`) USING BTREE
    )ENGINE=InnoDB DEFAULT CHARSET=utf8‘;
    prepare stmt from @createSql;
    execute stmt;
    WHILE s_date = e_date DO
    INSERT IGNORE INTO calendar_custom VALUES (DATE(s_date)) ;
    SET s_date = s_date + INTERVAL 1 DAY ;
    END WHILE ;
    END$$
    DELIMITER ;
    -- 生成数据到calendar_custom表2009-01-01~2029-01-01之间的所有日期数据
    CALL create_calendar (‘2009-01-01‘, ‘2029-01-01‘);
    DELIMITER $$
    DROP PROCEDURE IF EXISTS create_calendar $$
    CREATE PROCEDURE create_calendar (s_date DATE, e_date DATE)
    BEGIN
    -- 生成一个日历表
    SET @createSql = ‘truncate TABLE calendar_custom‘;
    prepare stmt from @createSql;
    execute stmt;
    WHILE s_date = e_date DO
    INSERT IGNORE INTO calendar_custom VALUES (DATE(s_date)) ;
    SET s_date = s_date + INTERVAL 1 DAY ;
    END WHILE ;
    END$$
    DELIMITER ;
    -- 生成数据到calendar_custom表2009-01-01~2029-01-01之间的所有日期数据
    CALL create_calendar (‘2009-01-02‘, ‘2009-01-07‘);

    到此这篇关于mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)的文章就介绍到这了,更多相关mysql获取指定时间段中的日期与月份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 解析MySQL中存储时间日期类型的选择问题
    • MySQL存储时间类型选择的问题讲解
    • 如何选择合适的MySQL日期时间类型来存储你的时间
    • 解决MySQL存储时间出现不一致的问题
    • MySQL中存储时间的最佳实践指南
    上一篇:MySQL REVOKE实现删除用户权限
    下一篇:MySQL 使用索引扫描进行排序
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表) mysql,获取,指定,时间段,