mysql 时间之间_MYSQL查询两个时间之间的日期列表

这个一般用于统计,今天在开发一个拆线时用到了。需要把日期来显示在X轴上,直接百度了下,方法有好多,

找了一个最实用的(需要建一张临时表)CREATE TABLE num (i INT);

INSERT INTO num (i)

VALUES

(0),

(1),

(2),

(3),

(4),

(5),

(6),

(7),

(8),

(9);

SELECT

adddate('2012-09-01', numlist.id) AS 'date'

FROM

(

SELECT

n1.i + n10.i * 10 + n100.i * 100 AS id

FROM

num n1

CROSS JOIN num AS n10

CROSS JOIN num AS n100

) AS numlist

WHERE

adddate('2012-09-01', numlist.id) <= '2012-09-10';

74d06f704c9b8bceca7780f4476fe8aa.png

方法2:-- 定义自增变量

set @i = -1;

-- 创建指定日期间记录数天数需要 加 1

set @sql = repeat(" select 1 union all",-datediff('2012-09-01','2012-09-10')+1);

-- 将最后一个union all 去掉,这里前边加1个空格,就不用在减1了

set @sql = left(@sql,length(@sql)-length(" union all"));

-- 拼接sql

set @sql = concat("select date_add('2012-09-01',interval @i:=@i+1 day) as date from (",@sql,") as tmp");

prepare stmt from @sql;

execute stmt;

401c5f3066cdb7c1d20b17ec7efdc86b.png

方法三存储过程(没测试):DELIMITER $$

DROP PROCEDURE IF EXISTS DayRangeProc$$

CREATE PROCEDURE DayRangeProc(IN start_date datetime , IN end_date datetime )

BEGIN

DECLARE temp  INT;

DECLARE range_day  INT;

SET temp = 0;

SET range_day = (SELECT DATEDIFF(end_date,start_date));

WHILE temp  <= range_day DO

select ADDDATE(start_date, temp);

SET temp = temp + 1;

END WHILE;

END$$

DELIMITER ;

Call DayRangeProc('2010-9-1','2010-9-10');

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值