1

以下の表 1 に示す単純なデータ セットがあります。START_SHIFT_DT_TIME表 1 の列を使用して 2 つの新しい列 (および) を生成したいと考えEND_SHIFT_DT_TIMEています。目的の出力を表 2 に示します。

要件は次のとおりです。

  1. 時間が 22:00:00 以降に始まる場合START_SHIFT、実際の開始日は前日になります。
  2. 開始時間が 22:00:00 より前の場合START_SHIFT、実際の開始日は翌日になります。

SQL サーバーを使用しています。

表 1 :

START_SHIFT END_SHIFT       DATE    
22:00:00    06:00:00        1/13/2012 12:00:00 AM
07:00:00    15:00:00        1/13/2012 12:00:00 AM
23:30:00    07:30:00        2/27/2012 12:00:00 AM
00:00:00    08:00:00        2/17/2012 12:00:00 AM
17:00:00    01:00:00        1/1/2012 12:00:00 AM

表 2 :

START_SHIFT END_SHIFT     DATE                  START_SHIFT_DT_TIME     END_SHIFT_DT_TIME
22:00:00    06:00:00      1/13/2012 12:00:00 AM  1/12/2012 10:00:00 PM  1/13/2012 6:00:00 AM
07:00:00    15:00:00      1/13/2012 12:00:00 AM  1/13/2012 7:00:00 AM   1/13/2012 3:00:00 PM
23:30:00    07:30:00      2/27/2012 12:00:00 AM  2/26/2012 11:30:00 PM  2/27/2012 7:30:00 AM
00:00:00    08:00:00      2/17/2012 12:00:00 AM  2/17/2012 12:00:00 AM  2/17/2012 8:00:00 AM
17:00:00    01:00:00      1/1/2012 12:00:00 AM   1/1/2012 5:00:00 PM    1/2/2012 1:00:00 AM
4

1 に答える 1

0
SELECT
  START_SHIFT,
  END_SHIFT,
  DATE,
  DATEADD(SS,
          DATEDIFF(SS,0,START_SHIFT),
          DATEADD(D,
                  CASE WHEN START_SHIFT >= '22:00' THEN -1 ELSE 0 END,
                  DATE)) START_SHIFT_DT_TIME,
  DATEADD(SS,
          DATEDIFF(SS,0,END_SHIFT),
          DATE) END_SHIFT_DT_TIME
FROM TBL

最後の列で使用されているパターンは、 の時間コンポーネントがEND_SHIFT秒に変換されてから に追加されるというものDATEです。START_SHIFT4 列目も同じパターンで、 22:00 以降の場合に -1 日 (前) を追加する追加ステップを実行します。

于 2012-09-21T18:48:53.420 に答える