求教: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
...全文
464 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
建立个日期索引表,然后做外连接

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧