mysql 生成日期段_Mysql生成任意指定两时间范围内的日期列表(三种方法)

本文介绍了三种在Mysql中生成指定日期范围内的日期列表的方法:创建临时日历表、使用变量和内置函数,以及通过数字辅助表。这些方法可以帮助用户根据业务需求获取特定时间段的完整日期数据。
摘要由CSDN通过智能技术生成

2ff34e647e2e3cdfd8dca593e17d9b0a.png参考链接创建一个临时的日历表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 (

`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 VALUES (DATE(s_date)) ;

SET s_date = s_date + INTERVAL 1 DAY ;

END WHILE ;

END$$

DELIMITER ;

CALL create_calendar ('2018-03-01', '2018-12-30');

总结:生成一张临时表,里面存放着你自己指定的时间范围内的所有日期。生成临时表,根据自己业务需求与数据进行各种操作得出某段时间范围内日期齐全的数据。(变量控制)指定数据条数,生成连续的数字或日期1

2

3

4

5

6

7SELECT DATE_FORMAT(DATE_SUB(NOW(), INTERVAL xc MONTH), '%Y-%m') as date

FROM (

SELECT @xi:[email protected]+1 as xc from

(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc1,

(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc2,

(SELECT @xi:=0) xc0

) xcxc

5371e3cf854f505d09c837d5fcaec351.png总结:在如上的例子当中,涉及到的知识点是变量,DATE_SUB(),DATE_FORMAT().使用以上方法的好处就是不用创建存储过程,也不涉及到任何表。缺点就是数据的条数控制并不灵活,不能和用户之间形成互动,即不能自定义日期区间,只能控制数据条数。利用数据量大的表做操作创建一个数字辅助表1

2

3

4CREATE TABLE `manhour_record` (

`key` int(11) NOT NULL,

PRIMARY KEY (`key`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数字辅助表';创建一个存储过程为数字辅助表增加数据1

2

3

4

5

6

7

8

9

10

11

12

13

14DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `create_nums`(cnt int unsigned)

BEGIN

declare s int unsigned default 1;

truncate table manhour_record;

insert into manhour_recordselect s;

while s*2<=cnt do

begin

insert into nums select `key`+s from manhour_record;

set s=s*2;

end;

end while;

END$$

DELIMITER ;执行存储过程,增加1-50000进入数字辅助表1call create_nums(50000);代码编写

6adf719e350ec83f2b0c59440ad4c77c.pngoracle 求两个日期之间的所有日期1

2

3

4SELECT TO_CHAR((TO_DATE('2019-05-28', 'yyyy-MM-dd') + (ROWNUM - 1)), 'yyyy-MM-dd') DT

FROM DUAL

CONNECT BY ROWNUM <=

(TO_DATE('2019-05-31', 'yyyy-MM-dd') - TO_DATE('2019-05-28', 'yyyy-MM-dd') + 1);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值