我们目前有以下列:
CustomerID int
ArrivalDateTime datetime
CheckPoint varchar(20)
DepartureDateTime datetime
CheckPoint 列根据特定查询记录 24 小时格式的时间。
CustomerID ArrivalDateTime CheckPoint DepartureDateTime
1 2015-05-03 08:15 0800 2015-05-03 08:30
2 2015-05-04 13:15 1300 2015-05-04 15:30
我需要的是将 ArrivalDateTime 中的时间替换为 CheckPoint 时间。其内容如下:
CustomerID ArrivalDateTime DepartureDateTime
1 2015-05-03 08:00 2015-05-03 08:30
2 2015-05-04 13:00 2015-05-04 15:30
这样我就可以获得从 ArrivalDateTime 到 DepartureDateTime 的时差。 预期结果:
CustomerID ArrivalDateTime DepartureDateTime TimeInMinutes
1 2015-05-03 08:00 2015-05-03 08:30 30
2 2015-05-04 13:00 2015-05-04 15:30 150
最佳答案
试试这个:
select
CustomerID
, DATEADD(day, DATEDIFF(day, 0, ArrivalDateTime), STUFF(CheckPoint_,3,0,':')) ArrivalDateTime
, DepartureDateTime
, DATEDIFF(mi, DATEADD(day, DATEDIFF(day, 0, ArrivalDateTime), STUFF([CheckPoint],3,0,':')), DepartureDateTime) as TimeInMinutes
from t;
如果您不想重复这些函数,您可以将它们移动到 cte 或派生表,如下所示:
select
CustomerID
, ArrivalDateTime
, DepartureDateTime
, DATEDIFF(mi, ArrivalDateTime, DepartureDateTime) as TimeInMinutes
from (
select
CustomerID
, DATEADD(day, DATEDIFF(day, 0, ArrivalDateTime), STUFF([CheckPoint],3,0,':')) ArrivalDateTime
, DepartureDateTime
from t) a
;
关于sql - 连接+时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31600789/