2015-05-09 85 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;