2012-04-24 31 views
0

我需要創建一個存儲大於24小時的列。例如'25:00:00','129:23:12'等)。在SQL Server 2005中計算大約24小時以上

該列將用於執行datetime區間間的計算:'時間'。

我試圖

SELECT CAST((CAST(CAST(RIGHT('107:37', 6) as datetime) AS FLOAT))/(207.160) AS DATETIME) 

如果

低於'23:59'而不是'107:37'工作的罰款。

'107:37'給予錯誤:

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

+2

這很愚蠢。如果你想計算時間或日期間隔,那麼爲什麼不使用日期時間類型,時間和日期函數呢? – paulsm4 2012-04-24 07:06:58

+4

只存儲秒數會不會更簡單?轉換爲小時和分鐘是簡單的算術。 – Joni 2012-04-24 07:07:51

+1

不,將數字存儲爲日期時間會更簡單,並使用諸如datediff()之類的函數。例如:http://stackoverflow.com/questions/1770594/how-to-calculate-difference-in-hours-decimal-between-two-dates-in-sql-server – paulsm4 2012-04-24 07:09:32

回答

2

只是存儲的值作爲datetime數據類型。您可以對日期時間數據類型(如+, - ,SUM,MIN,MAX等)進行數學計算,並且還可以使用DateDiff和DateAdd。你將要遇到的唯一棘手的問題是將數值顯示爲HHHH:mm:ss。但你可以很容易地做到這一點:

DECLARE @datetime DATETIME 
SET @datetime = 4.2 
SELECT CAST((FLOOR(CAST(@datetime AS FLOAT)) * 24) + DatePart(Hour, @datetime) AS VARCHAR) + 
    ':' + CAST(DatePart(Minute, @datetime) AS VARCHAR) 
    + ':' + CAST(DatePart(Second, @datetime) AS VARCHAR)