求教:MYSQL查询规定时间段的每一天

zztfkyd99 2015-07-09 08:23:17
如题:比如规定时间是2015年6月28日 至2015年7月5日
那么查询结果应该为
1 2015-6-28
2 2015-6-29
3 2015-6-30
4 2015-7-1
5 2015-7-2
6 2015-7-3
7 2015-7-4
8 2015-7-5
...全文
369 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Jimmy_pan 2017-08-01
#2017年7月份的每一天 SET @beginDate='2017-07-01'; SET @maxDate ='2017-07-31'; SELECT DATE(@tempDay),@tempDay:=DATE_ADD(@tempDay,INTERVAL 1 DAY) FROM t_table f #该表是系统上已存在的一个有比较多数据的表 LEFT JOIN (SELECT @tempDay:=@beginDate) b ON 1=1 WHERE @tempDay<=@maxDate http://www.cnblogs.com/Jimmy-pan/p/MysqlTimeList.html
回复
zztfkyd99 2015-07-09
引用 6 楼 yangb0803 的回复:
[quote=引用 5 楼 zztfkyd99 的回复:] 我说怎么看不懂 哈 感觉好高深的
找了个MYSQL的自动补全日期的, 你看下

--创建表
--create table [table](dtime datetime, data varchar(10), num smallint)
--添加测试数据
--insert into [table] select '2002-9-8' ,'data1',0
--insert into [table] select '2002-9-10' ,'data1',3
--insert into [table] select '2002-9-11' ,'data1',4
--测试语句
select * from [table]
--你需要的效果
declare @d table(time datetime)
declare @date datetime
set @date='2002-09-07'
while @date<='2002-09-12'
    begin
      insert @d select @date
      set @date= dateadd(dd,1,cast(@date as datetime))
    end
select convert(varchar(10),time,120) as time
, isnull(data, 'data1') as data
,isnull(num, 0) as num
from @d d left join [table] t
on convert(varchar(10),dtime,120) = convert(varchar(10),time,120)
http://zhidao.baidu.com/link?url=sG41OMsJInPrcqFWdZe_g3dwGMKm25-lPKS_uk2LzzBTNPJM9870rDWgUpkwRaq_ji1VSmNLwKeM-jAk22-UwAtMPsmHbD9UrNp7G4f4TQG[/quote] 貌似只能用存储过程了
回复
道玄希言 2015-07-09
引用 5 楼 zztfkyd99 的回复:
我说怎么看不懂 哈 感觉好高深的
找了个MYSQL的自动补全日期的, 你看下

--创建表
--create table [table](dtime datetime, data varchar(10), num smallint)
--添加测试数据
--insert into [table] select '2002-9-8' ,'data1',0
--insert into [table] select '2002-9-10' ,'data1',3
--insert into [table] select '2002-9-11' ,'data1',4
--测试语句
select * from [table]
--你需要的效果
declare @d table(time datetime)
declare @date datetime
set @date='2002-09-07'
while @date<='2002-09-12'
    begin
      insert @d select @date
      set @date= dateadd(dd,1,cast(@date as datetime))
    end
select convert(varchar(10),time,120) as time
, isnull(data, 'data1') as data
,isnull(num, 0) as num
from @d d left join [table] t
on convert(varchar(10),dtime,120) = convert(varchar(10),time,120)
http://zhidao.baidu.com/link?url=sG41OMsJInPrcqFWdZe_g3dwGMKm25-lPKS_uk2LzzBTNPJM9870rDWgUpkwRaq_ji1VSmNLwKeM-jAk22-UwAtMPsmHbD9UrNp7G4f4TQG
回复
zztfkyd99 2015-07-09
我说怎么看不懂 哈 感觉好高深的
回复
道玄希言 2015-07-09
引用 3 楼 zztfkyd99 的回复:
只能用存储过程是吧 用SQL不可以么
额, 你要的是MYSQL下的语句啊...... 我这个是 MSSQL2005以上版本用的。
回复
zztfkyd99 2015-07-09
只能用存储过程是吧 用SQL不可以么
回复
道玄希言 2015-07-09


declare @dt1 date
declare @dt2 date

set @dt1 = '2015-06-28'
set @dt2 = '2015-07-05'
;with cte
as(
select @dt1 as dt
union all
select dateadd(day, 1, T1.dt) as dt from cte T1
where not exists
(select dt from 
(select @dt1 as dt) as T2
where T2.dt=DATEADD(DD,1,T1.dt)
)
and T1.dt < @dt2
)
select * from cte

/*---------------------------------------------------*/
dt

2015-06-28
2015-06-29
2015-06-30
2015-07-01
2015-07-02
2015-07-03
2015-07-04
2015-07-05

回复
daxin1987 2015-07-09
建立个日期索引表,然后做外连接
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2015-07-09 08:23
社区公告
暂无公告