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