2015-12-14 469 views
0

在表中,我有一列(AvgWaitTime),它以秒爲單位存儲數據值(數據類型:float),明智的。我有一個函數使用AvgWaitTime列和其他幾列執行一些計算,並以時間格式返回一個值。我想將函數返回的值(時間格式)轉換爲秒(最好是小數,如果不是則爲int)。操作數類型衝突:時間與int不兼容

select 
(datepart(HH, dbo.fnGetMonthlyAverageWaitTime(m.RDate) * 60 * 60) + 
datepart(mi, dbo.fnGetMonthlyAverageWaitTime(m.RDate) * 60) + 
datepart(s, dbo.fnGetMonthlyAverageWaitTime(m.RDate)))[MonthlyAverageWaitTime] 
from TelephonyMTD m 

Error: Operand type clash: time is incompatible with int 

所以,我試圖運行這個命令:

select 
(datepart(HH, GetDate() * 60 * 60) + 
datepart(mi, GetDate() * 60) + 
datepart(s, GetDate())) 

現在它說,從數據類型的datetime隱式轉換爲int是不允許的。使用CONVERT函數來運行此查詢。當我查看數據類型轉換圖表時,這是真的,我知道現在允許轉換爲int和float。

請指教。

+1

'GETDATE()* 60',可能是你意思是...... GetDate())* 60'? –

+0

擺脫函數也可能是一個好主意,將其更改爲內聯表值函數,或者如果這不起作用,至少每行調用它一次。 –

回答

0

打開和關閉括號是一個問題引起了上述錯誤:請嘗試像下面

SELECT ( 
(Datepart(HH, Getdate()) * 60 * 60) + 
(Datepart(mi, Getdate()) * 60) + 
Datepart(s, Getdate()) 
) 
1

問題是你試圖通過一個整數,沒有任何意義繁殖日期/日期:

GetDate() * 60 * 60 

你可以簡單地使用DATEDIFF用秒,以秒爲單位獲得的價值:

SELECT DATEDIFF(SECOND, '00:00:00', dbo.fnGetMonthlyAverageWaitTime(m.RDate)) AS MonthlyAverageWaitTime 
FROM TelephonyMTD AS m 

簡單的例子

SELECT t.AvgTime, 
     AvgTimeInSeconds = DATEDIFF(SECOND, '00:00:00', t.AvgTime) 
FROM (VALUES 
      (CAST('00:01:15' AS TIME)), 
      (CAST('05:36:47' AS TIME)) 
     ) AS t (AvgTime); 

其中給出:

+----------+------------------+ 
| AvgTime | AvgTimeInSeconds | 
+----------+------------------+ 
| 00:01:15 |  75  | 
| 05:36:47 |  20207  | 
+----------+------------------+ 
0

嘗試使用下面的語法來seconds轉換爲day, hour, minute, seconds

DECLARE @sec INT = 86400; 

SELECT 
    CAST(@sec /60/60/24 AS VARCHAR(12)) + ' Days,' 
    + CAST(@sec /60/60 % 24 AS VARCHAR(12))+ ' Hours,' 
    + CAST(@sec /60 % 60 AS VARCHAR(2)) + ' Minutes, ' 
    + CAST(@sec % 60 AS VARCHAR(2))  + ' Seconds.'; 
相關問題