2013-05-20 44 views
1

我有3列在DB工作時間參數(00:15),開始時間(09:00),結束時間(15:00)怎樣才能顯示2個不同的時間參數之間的所有時間

現在我想展示我應該寫什麼查詢,以便它返回所有時間的00:15分的差距09:00和15:00

之間的值是這樣的:

09:00 - 09:15 
09:15 - 09:30 
09:30 - 09:45 
- 
- 
- 
- 
14:45 - 15:00 
+0

你有一個滿桌子的這些行與參數,開始時間和結束時間,對不對?或者你只需​​要這個例子的解決方案? – Beth

回答

6

使用CTE和假設hour part of @time is zero

declare @time time(0) = '00:15', 
     @start time(0) = '12:00', 
     @end time(0) = '15:00' 

;with cte as (
    select @start sTime, dateadd(minute, datepart(minute,@time), @start) eTime 
    union all 
    select eTime, dateadd(minute, datepart(minute,@time), eTime) 
    from cte 
    where dateadd(minute, datepart(minute,@time), eTime) <= @end 
) 
select left(sTime,5) + ' - ' + left(eTime, 5) results 
from cte 

--results 
12:00 - 12:15 
12:15 - 12:30 
12:30 - 12:45 
12:45 - 13:00 
13:00 - 13:15 
13:15 - 13:30 
13:30 - 13:45 
13:45 - 14:00 
14:00 - 14:15 
14:15 - 14:30 
14:30 - 14:45 
14:45 - 15:00 
+0

你真棒..這正是什麼米'看...謝謝! – TheCode

+0

沒問題,我的榮幸! – Kaf

1

使用公用表表達式(CTE)生成一個所有時間都在你想要的表格。

Declare @strtDt smallDatetime = '15 May 2013 09:00'; 
Declare @endDt smallDateTime = '15 May 2013 15:00'; 
With DateTimes(dt) As 
    (Select @strtDt 
     Union All 
    Select DateAdd(minute, 15, dt) 
    From DateTimes 
    Where dt < @endDt) 
Select dt from DateTimes 
option (maxrecursion 10000) 
相關問題