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

SQL Server 2008:以毫秒为单位的平均计时,sql,sql-server-2008,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)

我有这个疑问

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
以秒为单位。但是我希望以以下格式查看它:MM:SS.msmsms,因为大多数时间结果以毫秒为单位。那么,有可能以这种格式看到结果吗

提前感谢。

在您的
datediff(ss、transtime、AuthProcessedTime)
将ss改为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
试试这个:

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
    数据类型指定长度
  • 不要将日期转换为字符串以删除时间部分。使用
    DateDiff
    DateAdd
    ,或者因为您使用的是SQL 2008,所以可以转换为
    date
  • 除非你真的知道自己在做什么,否则不要使用(NOLOCK)。它最终会咬你
  • 不要兑换成钱。真奇怪。它有两个小数位,如果你真的想要,那么就转换成小数([某物],2)。否则,有人会看到你的代码,然后说“怎么回事?”并为你“修复”,即使这是你想要的。你可以得到一个足够精确的十进制转换,只需乘以1.0,如我所示
  • 请指定对象的模式。它很小,但有助于提高性能(如果我没有记错的话),不这样做可能会导致不必要的计划重新编译

有关日期部分,请参阅milliseconds@Rikky你检查我的答案了吗?@ErikE什么错误?用户说他/她希望答案以毫秒为单位,因此我建议他使用mm代替ss。请告诉我错误,以便我能澄清。@WaqarJanjua看到我在查询中提到的问题。