0

我有这个查询

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因为大多数时间结果都以毫秒为单位。那么是否有可能以这种格式查看结果?

提前致谢。

4

2 回答 2

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数据类型的长度。
  • 不要将日期转换为字符串以删除时间部分。使用DateDiffand DateAdd,或者由于您使用的是 SQL 2008,您可以转换为date.
  • 除非您真的知道自己在做什么,否则不要使用 WITH (NOLOCK)。它最终会咬你。
  • 不要转化为金钱。这很奇怪。它有 2 个小数位,如果你真的想要,然后转换为小数([something], 2)。否则有人会看到你的代码然后说“这到底是怎么回事?” 并为您“修复”它,即使那是您想要的。就像我展示的那样,只需乘以 1.0,您就可以获得足够精确的十进制转换。
  • 一定要指定对象的架构。它很小,但有助于提高性能,而且(如果我没记错的话)不这样做会导致不必要的计划重新编译。
于 2012-07-16T08:22:25.803 回答
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
于 2012-07-16T06:50:15.713 回答