半夜提问等答案

xikboy 2008-11-08 11:35:46
本人做一个像街上的红绿一样的时间控制,从一个起始时间算起每个街口的灯亮时间是不一样,结果要得出一个时间列表.
比如我设一个起始时间点:2008-11-08 11:20 分
1号路口 间隔 2分钟亮
2号路口 间隔 3分钟亮
3号路口 间隔 2分钟亮
4号路口 间隔 4分钟亮
5号路口 间隔 1分钟亮



现在我设定一个终止日期如:2008-11-11 12:00 分
要能得出一个列表:
所有路口灯亮的时间表:
如:
1号路口 2号路口 3号路口 .....
2008-11-08 11:22 2008-11-08 11:23 2008-11-08 11:22
2008-11-08 11:24 2008-11-08 11:26 2008-11-08 11:24
2008-11-08 11:26 2008-11-08 11:29 2008-11-08 11:26
2008-11-08 11:28 2008-11-08 11:32 2008-11-08 11:28
....

...全文
173 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
appleller 2008-11-09
  • 打赏
  • 举报
回复

create PROCEDURE time_insert
(
@stime datetime,
@etime datetime,
@time int,
@n int,
@m int

)
AS
set @n=(datediff(mi,@stime,@etime)/@time)
while (datediff(mi,@stime,@etime)/@time)>1

begin

insert into table13(tm)
values(DATEADD (mi ,@time, @stime ))
set @n=@n+1
set @m=@m+@time
set @stime=DATEADD (mi ,@time, @stime )
end

exec time_insert '2008-11-08 11:20','2008-11-08 12:00',2,0,0

select * from table13

结果:
2008-11-08 11:22:00.000
2008-11-08 11:24:00.000
2008-11-08 11:26:00.000
2008-11-08 11:28:00.000
2008-11-08 11:30:00.000
2008-11-08 11:32:00.000
2008-11-08 11:34:00.000
2008-11-08 11:36:00.000
2008-11-08 11:38:00.000
2008-11-08 11:40:00.000
2008-11-08 11:42:00.000
2008-11-08 11:44:00.000
2008-11-08 11:46:00.000
2008-11-08 11:48:00.000
2008-11-08 11:50:00.000
2008-11-08 11:52:00.000
2008-11-08 11:54:00.000
2008-11-08 11:56:00.000
2008-11-08 11:58:00.000

-晴天 2008-11-09
  • 打赏
  • 举报
回复
declare @t datetime,@endt datetime
set @t='2008-11-08 11:20:00'
set @endt='2008-11-11 12:00:00'

select dateadd(mi,2,@t) as [1号路口], dateadd(mi,3,@t) as [2号路口], dateadd(mi,2,@t) as [3号路口], dateadd(mi,4,@t) as [4号路口], dateadd(mi,1,@t) as [5号路口]
into #
while @t<@endt
begin
set @t=dateadd(mi,1,@t)
insert into #
select dateadd(mi,2,a.[1号路口]) as [1号路口],
dateadd(mi,3,a.[2号路口]) as [2号路口],
dateadd(mi,2,a.[3号路口]) as [3号路口],
dateadd(mi,4,a.[4号路口]) as [4号路口],
dateadd(mi,1,a.[5号路口]) as [5号路口]
from (select top 1 * from # order by [1号路口] desc)a
end
select * from #
go
drop table #
/*
1号路口 2号路口 3号路口 4号路口 5号路口
----------------------- ----------------------- ----------------------- ----------------------- -----------------------
2008-11-08 11:24:00.000 2008-11-08 11:26:00.000 2008-11-08 11:24:00.000 2008-11-08 11:28:00.000 2008-11-08 11:22:00.000
2008-11-08 11:26:00.000 2008-11-08 11:29:00.000 2008-11-08 11:26:00.000 2008-11-08 11:32:00.000 2008-11-08 11:23:00.000
2008-11-08 11:28:00.000 2008-11-08 11:32:00.000 2008-11-08 11:28:00.000 2008-11-08 11:36:00.000 2008-11-08 11:24:00.000
2008-11-08 11:30:00.000 2008-11-08 11:35:00.000 2008-11-08 11:30:00.000 2008-11-08 11:40:00.000 2008-11-08 11:25:00.000
2008-11-08 11:32:00.000 2008-11-08 11:38:00.000 2008-11-08 11:32:00.000 2008-11-08 11:44:00.000 2008-11-08 11:26:00.000
2008-11-08 11:34:00.000 2008-11-08 11:41:00.000 2008-11-08 11:34:00.000 2008-11-08 11:48:00.000 2008-11-08 11:27:00.000
2008-11-08 11:36:00.000 2008-11-08 11:44:00.000 2008-11-08 11:36:00.000 2008-11-08 11:52:00.000 2008-11-08 11:28:00.000
2008-11-08 11:38:00.000 2008-11-08 11:47:00.000 2008-11-08 11:38:00.000 2008-11-08 11:56:00.000 2008-11-08 11:29:00.000
2008-11-08 11:40:00.000 2008-11-08 11:50:00.000 2008-11-08 11:40:00.000 2008-11-08 12:00:00.000 2008-11-08 11:30:00.000
2008-11-08 11:42:00.000 2008-11-08 11:53:00.000 2008-11-08 11:42:00.000 2008-11-08 12:04:00.000 2008-11-08 11:31:00.000
2008-11-08 11:44:00.000 2008-11-08 11:56:00.000 2008-11-08 11:44:00.000 2008-11-08 12:08:00.000 2008-11-08 11:32:00.000
2008-11-08 11:46:00.000 2008-11-08 11:59:00.000 2008-11-08 11:46:00.000 2008-11-08 12:12:00.000 2008-11-08 11:33:00.000
......
*/
fcuandy 2008-11-09
  • 打赏
  • 举报
回复

直接得到
1号路口 2008-11-08 11:22
1号路口 2008-11-08 11:24
...
2号路口 2008-11-08 11:23
2号路口 ...
...
3号路口 ..
...

这样就可以了。

DECLARE @a TABLE(L VARCHAR(10),light_time INT)
INSERT @a SELECT 1,2
UNION ALL SELECT 2,3
UNION ALL SELECT 3,2
UNION ALL SELECT 4,4
UNION ALL SELECT 5,1

DECLARE @st DATETIME,@et DATETIME
SELECT @st = '2008-11-08 11:20:00',@et='2008-11-08 12:00:00'
;WITH fc AS
(SELECT idx=ROW_NUMBER() OVER(ORDER BY GETDATE())-1 FROM sys.objects,sys.columns)

SELECT RTRIM(L) + '号灯',DATEADD(mi,light_time*idx,@st) 时间 FROM fc,@a
WHERE DATEADD(mi,light_time*idx,@st)<@et
ORDER BY L

/*
1号灯 2008-11-08 11:20:00.000
1号灯 2008-11-08 11:22:00.000
1号灯 2008-11-08 11:24:00.000
1号灯 2008-11-08 11:26:00.000
1号灯 2008-11-08 11:28:00.000
1号灯 2008-11-08 11:30:00.000
1号灯 2008-11-08 11:32:00.000
1号灯 2008-11-08 11:34:00.000
1号灯 2008-11-08 11:36:00.000
1号灯 2008-11-08 11:38:00.000
1号灯 2008-11-08 11:40:00.000
1号灯 2008-11-08 11:42:00.000
1号灯 2008-11-08 11:44:00.000
1号灯 2008-11-08 11:46:00.000
1号灯 2008-11-08 11:48:00.000
1号灯 2008-11-08 11:50:00.000
1号灯 2008-11-08 11:52:00.000
1号灯 2008-11-08 11:54:00.000
1号灯 2008-11-08 11:58:00.000
1号灯 2008-11-08 11:56:00.000
2号灯 2008-11-08 11:59:00.000
2号灯 2008-11-08 11:56:00.000
2号灯 2008-11-08 11:53:00.000
2号灯 2008-11-08 11:50:00.000
2号灯 2008-11-08 11:47:00.000
2号灯 2008-11-08 11:44:00.000
2号灯 2008-11-08 11:41:00.000
2号灯 2008-11-08 11:38:00.000
2号灯 2008-11-08 11:35:00.000
2号灯 2008-11-08 11:32:00.000
2号灯 2008-11-08 11:29:00.000
2号灯 2008-11-08 11:26:00.000
2号灯 2008-11-08 11:23:00.000
2号灯 2008-11-08 11:20:00.000
3号灯 2008-11-08 11:20:00.000
3号灯 2008-11-08 11:22:00.000
3号灯 2008-11-08 11:24:00.000
3号灯 2008-11-08 11:26:00.000
3号灯 2008-11-08 11:28:00.000
3号灯 2008-11-08 11:30:00.000
3号灯 2008-11-08 11:32:00.000
3号灯 2008-11-08 11:34:00.000
3号灯 2008-11-08 11:36:00.000
3号灯 2008-11-08 11:38:00.000
3号灯 2008-11-08 11:40:00.000
3号灯 2008-11-08 11:42:00.000
3号灯 2008-11-08 11:44:00.000
3号灯 2008-11-08 11:46:00.000
3号灯 2008-11-08 11:54:00.000
3号灯 2008-11-08 11:52:00.000
3号灯 2008-11-08 11:50:00.000
3号灯 2008-11-08 11:48:00.000
3号灯 2008-11-08 11:56:00.000
3号灯 2008-11-08 11:58:00.000
4号灯 2008-11-08 11:56:00.000
4号灯 2008-11-08 11:52:00.000
4号灯 2008-11-08 11:48:00.000
4号灯 2008-11-08 11:44:00.000
4号灯 2008-11-08 11:40:00.000
4号灯 2008-11-08 11:36:00.000
4号灯 2008-11-08 11:32:00.000
4号灯 2008-11-08 11:28:00.000
4号灯 2008-11-08 11:24:00.000
4号灯 2008-11-08 11:20:00.000
5号灯 2008-11-08 11:20:00.000
5号灯 2008-11-08 11:21:00.000
5号灯 2008-11-08 11:22:00.000
5号灯 2008-11-08 11:23:00.000
5号灯 2008-11-08 11:24:00.000
5号灯 2008-11-08 11:25:00.000
5号灯 2008-11-08 11:26:00.000
5号灯 2008-11-08 11:27:00.000
5号灯 2008-11-08 11:28:00.000
5号灯 2008-11-08 11:29:00.000
5号灯 2008-11-08 11:31:00.000
5号灯 2008-11-08 11:30:00.000
5号灯 2008-11-08 11:34:00.000
5号灯 2008-11-08 11:35:00.000
5号灯 2008-11-08 11:36:00.000
5号灯 2008-11-08 11:37:00.000
5号灯 2008-11-08 11:33:00.000
5号灯 2008-11-08 11:32:00.000
5号灯 2008-11-08 11:39:00.000
5号灯 2008-11-08 11:40:00.000
5号灯 2008-11-08 11:41:00.000
5号灯 2008-11-08 11:42:00.000
5号灯 2008-11-08 11:43:00.000
5号灯 2008-11-08 11:44:00.000
5号灯 2008-11-08 11:45:00.000
5号灯 2008-11-08 11:46:00.000
5号灯 2008-11-08 11:47:00.000
5号灯 2008-11-08 11:48:00.000
5号灯 2008-11-08 11:49:00.000
5号灯 2008-11-08 11:50:00.000
5号灯 2008-11-08 11:51:00.000
5号灯 2008-11-08 11:52:00.000
5号灯 2008-11-08 11:53:00.000
5号灯 2008-11-08 11:54:00.000
5号灯 2008-11-08 11:55:00.000
5号灯 2008-11-08 11:56:00.000
5号灯 2008-11-08 11:57:00.000
5号灯 2008-11-08 11:58:00.000
5号灯 2008-11-08 11:59:00.000
5号灯 2008-11-08 11:38:00.000
*/




很简单,用个循环,或者与具有标识列的表连表,从起始时间dateadd加上去(到终止时间)就可以了。




你这样的结果要行转列。

1号路口 2号路口 3号路口 .....
2008-11-08 11:22 2008-11-08 11:23 2008-11-08 11:22
2008-11-08 11:24 2008-11-08 11:26 2008-11-08 11:24
2008-11-08 11:26 2008-11-08 11:29 2008-11-08 11:26
2008-11-08 11:28 2008-11-08 11:32 2008-11-08 11:28
....

行转列,泛烂 ,不想写,看推荐贴。
  • 打赏
  • 举报
回复
看这个是不是你要的,不过里面有很多的null,另外为了方便我把时间缩小了,
declare @start datetime,@end datetime
set @start='2008-11-08 11:20:00'
set @end='2008-11-08 14:00:00'

declare @t table(time datetime)

while @start<=@end
begin
insert @t
select @start
select @start=dateadd(mi,1,@start)
end

set @start='2008-11-08 11:20:00'
select 一号路口 = case when datediff(mi,@start,time)%(select time from tb where name='1号路口') = 0 then time end,
二号路口 = case when datediff(mi,@start,time)%(select time from tb where name='2号路口') = 0 then time end,
三号路口 = case when datediff(mi,@start,time)%(select time from tb where name='3号路口') = 0 then time end,
四号路口 = case when datediff(mi,@start,time)%(select time from tb where name='4号路口') = 0 then time end,
五号路口 = case when datediff(mi,@start,time)%(select time from tb where name='5号路口') = 0 then time end

from @t
rucypli 2008-11-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mustudent 的回复:]
只给一个时间那不是无限循环下去了
我只能用While+DateAdd来完成了
[/Quote]
截止到 现在我设定一个终止日期如:2008-11-11 12:00 分
mjjzg 2008-11-09
  • 打赏
  • 举报
回复
学习,UP
xikboy 2008-11-08
  • 打赏
  • 举报
回复
有起始跟终止时间啊。
mustudent 2008-11-08
  • 打赏
  • 举报
回复
只给一个时间那不是无限循环下去了
我只能用While+DateAdd来完成了

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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