0

クエリを作成するためのヘルプが必要です。私の問題は、StartDateとEndDateがあり、これを60分のブロックに分ける必要があることです。

DECLARE @STARTDATE AS SMALLDATETIME
DECLARE @ENDDATE AS SMALLDATETIME

SET @STARTDATE = '2012-11-21 11:03:00'
SET @ENDDATE = '2012-11-21 13:04:00'

返品が必要です:

Hour, Time
11  , 57
12  , 60
13  , 04
4

3 に答える 3

1

再帰CTEを使用できます。例えば:

declare @startDate datetime = '2012-11-21 22:05:00'
declare @endDate datetime = '2012-11-22 01:06:00'

; with  TimeList as
        (
        select  @startDate as dt
        union all
        select  dateadd(hour, 1, dateadd(hour, datediff(hour, 0, dt), 0))
        from    TimeList
        where   dateadd(hour, 1, dt) < @endDate
        )
select  dt
from    TimeList
union all
select  @endDate

スニペットdateadd(hour, datediff(hour, 0, dt), 0)は、日付から時間と分を削除します。これは、日付からの時間数を計算し、その時間0数を日付まで加算することによって行われます0

SQLFiddleでの実例。

于 2012-11-21T15:46:34.313 に答える
0

理解できたかどうかはわかりませんが、開始日から60分間隔で時間と分が返されます。

DECLARE @STARTDATE AS SMALLDATETIME
DECLARE @ENDDATE AS SMALLDATETIME

DECLARE @time AS TABLE(id int identity(1,1), [hour] int, [time] int)

SET @STARTDATE = '2012-11-21 11:03:00'
SET @ENDDATE = '2012-11-21 13:04:00'

WHILE @STARTDATE < @ENDDATE
BEGIN
    SELECT @STARTDATE = DATEADD(MINUTE,60,@STARTDATE)
    INSERT INTO @time (hour,time)
    VALUES(DATEPART(HOUR,@STARTDATE),DATEPART(MINUTE,@STARTDATE))
END

SELECT * FROM @time
于 2012-11-21T15:36:31.587 に答える
0

あなたはそれを3つの部分に分けて行います。最初のピースは最初の1時間、60から分の値を引いたもの、2番目のピースはstart+1からendまでのすべての時間のtime=60、3番目のピースはendminutesです。

次に、abstractChaosが行ったように、それらを一時テーブルに挿入します。

AbstractChaosのような一時テーブルに挿入します。

DECLARE @STARTDATE AS SMALLDATETIME
DECLARE @ENDDATE AS SMALLDATETIME

DECLARE @TIME AS TABLE(id INT IDENTITY(1,1), [HOUR] INT, [TIME] INT)

SET @STARTDATE = '2012-11-21 11:03:00'
SET @ENDDATE = '2012-11-21 13:04:00'

INSERT INTO @TIME (HOUR,TIME) 
VALUES (datepart(HOUR,@startdate) ,60 - datepart(MINUTE,@startdate) )

WHILE @STARTDATE < @ENDDATE
BEGIN
    SELECT @STARTDATE = DATEADD(MINUTE,60,@STARTDATE)
    INSERT INTO @TIME (HOUR,TIME) 
    VALUES(datepart(HOUR,@STARTDATE) , 60) 
END

INSERT INTO @TIME (HOUR,TIME) 
VALUES(datepart(HOUR,@enddate) , datepart(MINUTE,@startdate)) 
于 2012-11-21T15:38:15.357 に答える