2012-07-16 43 views
0

我有此查詢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,因爲大部分時間結果都以毫秒爲單位。那麼是否有可能以這種格式查看結果?

在此先感謝。

+0

請參閱http://msdn.microsoft.com/de-de/library/ms189794.aspx for datepart毫秒 – stb 2012-07-16 06:51:43

+0

@Rikky你檢查我的答案嗎? – 2012-07-16 08:06:47

回答

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 
+0

不糾正其他明顯的錯誤使得這個答案很難投票... – ErikE 2012-07-16 08:16:06

+0

@ErikE什麼錯誤?用戶說他/她想要毫秒的答案,所以我建議他用mm來代替ss。請告訴我這個錯誤,以便我可以清除自己。 – 2012-07-16 08:18:24

+0

@waqar plz再次看到問題我已更新此 – Rikky 2012-07-17 06:49:57

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。
  • 指定對象的模式。它很小,但它有助於提高性能,並且(如果我不記得有誤)不這樣做會導致不必要的計劃重新編譯。