如何在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
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。