本人做一个像街上的红绿一样的时间控制,从一个起始时间算起每个街口的灯亮时间是不一样,结果要得出一个时间列表.
比如我设一个起始时间点: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
....

解决方案 »

  1.   

    只给一个时间那不是无限循环下去了
    我只能用While+DateAdd来完成了
      

  2.   

    看这个是不是你要的,不过里面有很多的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)
    endset @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
      

  3.   


    直接得到
    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,1DECLARE @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
    .... 行转列,泛烂 ,不想写,看推荐贴。
      

  4.   

    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
    ......
    */
      

  5.   


    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)>1begin
      
      insert into table13(tm)
      values(DATEADD (mi ,@time, @stime ))
      set @n=@n+1
      set @m=@m+@time
      set @stime=DATEADD (mi ,@time, @stime )
    endexec time_insert '2008-11-08 11:20','2008-11-08 12:00',2,0,0select * 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