SQL Server 2008:平均以毫秒为单位的时间

时间:2012-07-16 06:45:24

标签: sql sql-server-2008

我有这个查询

select 
    substring((convert(varchar, PostTime, 120)), 1, 11),
    AccountNumber,
    sum(Cast(datediff(ss, TranTime, AuthProcessedTime) as money)) / COUNT(1) AverageTime,
    COUNT(1) NumberOfCount 
from 
    AuthTransactions WITH (NOLOCK) 
group by 
    substring((convert(varchar, PostTime, 120)), 1, 11), AccountNumber

在此查询中AverageTime以秒为单位。但我希望以下列格式HH:MM:SS.msmsms看到它,因为大多数时间结果都以毫秒为单位。那么有可能以这种格式看到结果吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

试试这个:

SELECT
   Convert(date, PostTime) PostDay
   AccountNumber,
   Avg(Datediff(ms, TranTime, AuthProcessedTime) * 1.0) AverageTime,
   Count(*) NumberPerDay
FROM
   dbo.AuthTransactions 
GROUP BY
   Convert(date, PostTime),
   AccountNumber

我删除或更正了查询的几个问题:

  • 始终指定char数据类型的长度。
  • 不要将日期转换为字符串以删除时间部分。使用DateDiffDateAdd,或者由于您使用的是SQL 2008,因此可以转换为date
  • 除非你真的知道自己在做什么,否则不要使用WITH(NOLOCK)。它最终会咬你。
  • 不要兑换成钱。那太奇怪了。它有2个小数位,如果你真的想要,那么转换为十进制([something],2)。否则有人会看到你的代码,然后“哎呀?”并为你“修理”它,即使这是你想要的。你可以像我所展示的那样乘以1.0来获得足够精确的十进制转换。
  • 指定对象的架构。它很小,但它有助于提高性能(如果我不记得错误)不这样做会导致不必要的计划重新编译。

答案 1 :(得分:0)

datediff(ss,TranTime,AuthProcessedTime)中 将ss更改为ms。 ms用于毫秒秒。

像这样

select substring((convert(varchar,PostTime,120)),1,11),
AccountNumber,
sum(Cast (datediff(ms,TranTime,AuthProcessedTime)  as money)) / COUNT(1)
AverageTime,COUNT(1) NumberOfCount from AuthTransactions
WITH(NOLOCK) group by 
substring((convert(varchar,PostTime,120)),1,11),AccountNumber