转换、平均和投射后删除毫秒

Remove milliseconds after converting, avg and casting

好的。经过研究、研究和更多的研究,我已经走到这一步了,我在最后一步需要帮助。

SELECT Cast(DateAdd( ss,AVG(DateDiff( ss, '00:00:00', (A.ReceivedWhen - A.CallStartWhen))), '00:00:00' )  as time) as 'avg duration' 

我得到了我的 ReceivedWhen 和 CallStartWhen 之间的区别,对其求平均并分组。没问题。

我的 'avg duration' 是正确的,只是它包含了毫秒数

00:01:43.0000000

如何删除我的毫秒数?

表达式的类型是time,它本身没有格式。由客户来格式化它以供显示。所以答案可能是,你应该在你的客户端处理它。

但是 time 可以选择指定小数秒刻度。如果省略,默认值为 7 -- 100ns。如果您不想要任何小数秒,您可以使用 0

...
Cast(DateAdd( ss,AVG(DateDiff( ss, '00:00:00', (A.ReceivedWhen - A.CallStartWhen))), '00:00:00' )  as time(0)) as 'avg duration'
...

您可能还希望将其转换为 varchar 并对其应用样式。使用 convert() to do so. From the descriptions in the section "Date and Time Styles", 8 -- "hh:mi:ss" -- 似乎是你想要的。

...
convert(varchar, Cast(DateAdd( ss,AVG(DateDiff( ss, '00:00:00', (A.ReceivedWhen - A.CallStartWhen))), '00:00:00' )  as time), 8) as 'avg duration'
...