如何在SQL服务器中将军事小时数转换为mm / dd / yyyy和时间?

时间:2012-09-21 18:23:32

标签: sql sql-server sql-server-2008 sql-server-2005

我有一个简单的数据集,如下表1所示。我想使用表1中的列生成两个新列(START_SHIFT_DT_TIMEEND_SHIFT_DT_TIME)。所需的输出如表2所示。

要求是:

  1. 如果START_SHIFT小时在22:00:00或之后开始,则实际开始日期是前一天。
  2. 如果START_SHIFT小时在22:00:00之前开始,那么实际开始日期是第二天。
  3. 有人可以看看。注意,我使用的是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
    

1 个答案:

答案 0 :(得分: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。在第4列中,使用了相同的模式,当START_SHIFT为22:00或更晚时,它会增加-1天(上一个)的附加步骤。