我有一个简单的数据集,如下表1所示。我想使用表1中的列生成两个新列(START_SHIFT_DT_TIME
和END_SHIFT_DT_TIME
)。所需的输出如表2所示。
要求是:
START_SHIFT
小时在22:00:00或之后开始,则实际开始日期是前一天。START_SHIFT
小时在22:00:00之前开始,那么实际开始日期是第二天。有人可以看看。注意,我使用的是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
答案 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天(上一个)的附加步骤。