2015-05-09 86 views
1

我需要确定执行团队处理订单所需的平均时间。如何操作T-SQL中的返回日期时间值

我打算简单计算每个订单的“PaidDateUtc”和“ShippedDateUtc”值之间的“秒数”,然后获取平均值。

我简化了查询(减去日期范围过滤器)是这样的:

SELECT 
    dbo.Shipment.ShippedDateUtc - dbo.[Order].PaidDateUtc AS TimeToFulfill 
FROM 
    dbo.[Order] INNER JOIN 
    dbo.Shipment ON dbo.[Order].Id = dbo.Shipment.OrderId 

返回的值是这样的:

1900-01-01 00:25:27.263 

这意味着: 1天,1小时后, 25分钟和27秒

我的问题是:我怎么操纵它,以便返回的值看起来像E本:

91527  --(total of seconds) 
+0

提示:这是有帮助的标记同时与相应的软件数据库的问题(MySQL和甲骨文,DB2,...)和版本,例如'的SQL服务器2014'。语法和功能的差异往往会影响答案。 – HABO

回答

4

从它看起来像您使用的是Microsoft SQL Server或Sybase和如果是的话,那么你可以使用DATEDIFF函数来获取像这样为了与交货秒的量的语法:

SELECT  
    DATEDIFF(second, o.PaidDateUtc, s.ShippedDateUtc) AS TimeToFulfill 
FROM 
    dbo.[Order] o 
INNER JOIN 
    dbo.Shipment s ON o.Id = s.OrderId 

如果你想对每个订单的平均秒数包裹DATEDIFFAVG()group by order.id

SELECT 
    o.id,  
    AVG(DATEDIFF(second, o.PaidDateUtc, s.ShippedDateUtc)) AS TimeToFulfill 
FROM 
    dbo.[Order] o 
INNER JOIN 
    dbo.Shipment s ON o.Id = s.OrderId 
GROUP BY 
    o.id 
+1

完美,谢谢! – embryo

1

以秒为单位使用datediff()。您的查询也将寻找更简单,如果你使用表别名:

SELECT DATEDIFF(SECOND, o.PaidDateUtc, s.ShippedDateUtc) AS TimeToFulfill 
FROM dbo.[Order] o INNER JOIN 
    dbo.Shipment s 
    ON o.Id = s.OrderId;