2012-04-25 16 views
1

私はちょうど時間を表示し、StartHourと呼ばれる別の列にそれを挿入するために、のStartTimeと呼ばれる一つの列に時間を丸める関数を記述する必要があります。 EndTimeと呼ばれる別の列では、DATEPARTを使用して次の増分された時間に切り上げる必要があります(例:23:33:00.0000000は23(時間)+ 1(終了時間まで切り上げる)= 24それをEndHour列に保存する必要があります)。私はStartHourとStartMinute、EndHour、およびEndMinute(のStartTimeと終了時間の列と呼ばれる新しい列にこれらの新しい値を挿入するは、時間の計算に基づいて、1つまたは複数の行を保存するために、SQL Serverのストアドプロシージャを記述する必要が

は私が時間内(7)形式で、歴史的な目的のために働いている元の値です私は元の列にそれらを保持しています)。ここで

は、これまでT-SQLで私が持っているものだ:生成

SELECT (DATEPART(HOUR, [StartTime])) AS StartHour,(DATEPART(MINUTE, [StartTime])) AS StartMinute, 
(DATEPART(HOUR, [EndTime])) AS EndHour, 
(DATEPART(MINUTE, [EndTime])) AS EndMinute, StartTime, EndTime 
    FROM [test].[dbo].[Outage_Reports] 
    ORDER BY OutageDate ASC 

StartHour StartMinute EndHour  EndMinute  Startime   EndTime 
16  0     17  30   16:00:00 17:30:00 

は、私が今も2を挿入するストアドプロシージャに、この変換を記述する必要があります(または開始と終了の間の長さが1時間を超える場合、テーブルに新しい行が数時間続くと、さらに多くの行が発生します。または、停止が1時間以下であったときに1行を挿入するだけです。そして、開始列と終了列でその時間ごとの進行を考慮する必要があります。このよう

StartHour StartMinute EndHour  EndMinute  Startime  EndTime 
     16   0    17   00   16:00:00   17:30:00 

(上記障害の最初の時間を反映して、それが停止するまで、下に第二行は機能停止の後半時間を反映...両方が同じ停止チケットに接続されます表)

StartHour  StartMinute EndHour EndMinute Startime  EndTime 
    17    30    18   00 16:00:00  17:30:00 

アイデアは)...彼らは時間単位で注文を追跡する注文テーブルに参加することができます(と受注は分が含まれていることはありませんので、1時間単位で停止だけ時間を、ウェブサイトを追跡することです。したがって、計画は、1.5時間継続する停止のために2つの行を作成し、16時間、17時間、および18時間ごとの値を丸めて30分の列を持つ別の点として動作させることができます(1時間半は1時間分の注文と半時間分の注文を並べて行に分ける)。これにより、停電時の傾向をより正確に把握することができます。

私は、ストアドプロシージャにこのロジックを記述する方法へと損失のビットです。私は多分(私はStartHour列に16を挿入したい...それは16時45分であっても)常にそれがDATEPARTの時間の値に丸めておく変数にしてStartHour列のための新しい時間と分の値を宣言する必要があります。 EndHour列を(私たちはそのような場合には時間かけて行ってきましたので、17、次に18)ただし、EndHourコラムで、私は切り上げ時間ごとの値を挿入したいです。これにより、停止が発生してから2時間近くが(この2つの行を介して)うまく説明されます。そして、それは簡単に私たちの受注テーブルに参加

が可能になる順番にこのロジックのストアドプロシージャ上の任意の指導をいただければ幸いです。

+1

停電が時間のちょうど*終了した場合(何らかの機会に、私は知っていますが、時間の最初の1分以内であっても)、次の時間に切り上げますか?また、深夜に及ぶ停電に対処しなければなりませんか? –

+0

両方の質問にはいります。 3時に始まり、停止が3時01分に始まる場合、StartHour 3とEndHour 4として記録し、次に分の長さを使用します(これは私が行う別の計算です)。 。その計算を注文数量に適用します。私が今必要とするのは、停電時間を1時間ごとにテーブルに取得する方法を知ることだけです。ありがとう! – Lynn

+4

私の最初の質問では、停電が2:45から開始し、*が3:00に終了した場合、1行(2-3)または2行(2-3および3-4)を挿入するのかどうかを意味しましたか? –

答えて

1

だけでなく、私は本当に目的を理解しませんでした! しかし論理は以下のようにのようなものかもしれ---

declare @StartTime time 
declare @EndTime time 
declare @Temp_StartTime time 

declare @temp_StartHour int 
declare @temp_EndHour int 
declare @temp_StartMinute int 
declare @temp_EndMinute int 

SET @StartTime='2:30:00' 
SET @EndTime='4:01:00' 
SET @[email protected] 

SET @temp_StartHour=DATEPART(HOUR, @StartTime) 
SET @temp_EndHour=DATEPART(HOUR, @EndTime) 
SET @temp_StartMinute=DATEPART(MI, @StartTime) 
SET @temp_EndMinute=DATEPART(MI, @EndTime) 

if(@temp_EndMinute>0) 
    BEGIN 
     SET @[email protected]_EndHour+1 
    END 

DECLARE @Temp_Table TABLE 
(
    StartHour int, 
    StartMinute int, 
    EndHour int, 
    EndMinute int, 
    StartTime time, 
    EndTime time 
) 

WHile((@[email protected]_StartHour>=1)) 
    BEGIN 
     INSERT INTO @Temp_Table 
     SELECT (DATEPART(HOUR, @Temp_StartTime)) AS StartHour,(DATEPART(MINUTE, @Temp_StartTime)) AS StartMinute, 
     @temp_StartHour+1 AS EndHour, 
     0 AS EndMinute, @StartTime as StartTime, @EndTime as EndTime 

     SET @[email protected]_StartHour+1 
     SET @Temp_StartTime=DATEADD(HOUR,1,@Temp_StartTime) 

     if(DATEPART(MI, @Temp_StartTime)!=0) 
      BEGIN 
       SET @Temp_StartTime=DATEADD(MI,[email protected]_StartMinute,@Temp_StartTime) 
      END 
    END 

SELECT * FROM @Temp_Table 

は、それが助けいただければ幸いです。

+0

ありがとう!!!!!!私はこれを試してすぐにあなたに知らせます。そして、目的については、私が言ったように、論理は私の上司です。なぜか彼はそれがこのようにしたいと思うのですが、あなたが私たちのシステムに精通していなければ、それはちょっと変わったと思います。 – Lynn

+0

すごくうまくいった。ありがとう!!これでどのように行ったのか分かりましたので、ロジックをさらに定義して追加することができます。 – Lynn

+0

嬉しいことに... :) –

関連する問題