如何在T-SQL中操作返回的日期时间值

如何在T-SQL中操作返回的日期时间值,sql,sql-server,tsql,datetime,Sql,Sql Server,Tsql,Datetime,我需要确定履行团队处理订单所需的平均时间 我计划简单地计算每个订单的“PaidDateUtc”和“ShippedDateUtc”值之间的“秒数”,然后得到平均值 我的简化查询(减去日期范围过滤器)如下所示: SELECT dbo.Shipment.ShippedDateUtc - dbo.[Order].PaidDateUtc AS TimeToFulfill FROM dbo.[Order] INNER JOIN dbo.Shipment ON dbo.[Order].

我需要确定履行团队处理订单所需的平均时间

我计划简单地计算每个订单的“
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
91527     --(total of seconds)
返回的值如下所示:

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
91527     --(total of seconds)
这意味着: 1天1小时25分钟27秒

我的问题是:如何操作它,使返回的值如下所示:

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
91527     --(total of seconds)

从语法上看,您似乎正在使用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
如果需要每个订单的平均秒数,请将
DATEDIFF
包装在
AVG()
中,并使用
按订单分组.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

从语法上看,您似乎正在使用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
如果需要每个订单的平均秒数,请将
DATEDIFF
包装在
AVG()
中,并使用
按订单分组.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
使用
datediff()。如果使用表别名,查询看起来也会更简单:

SELECT DATEDIFF(SECOND, o.PaidDateUtc, s.ShippedDateUtc) AS TimeToFulfill
FROM dbo.[Order] o INNER JOIN
     dbo.Shipment s
     ON o.Id = s.OrderId;
使用
datediff()。如果使用表别名,查询看起来也会更简单:

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

提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题很有帮助。语法和功能的差异通常会影响答案。提示:使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。