2013-02-06 96 views
1

在T-SQL或任何SQL平臺中,Excel內置日期有翻譯格式 [h]:mm:ssSQL日期格式[h]:mm:ss像Excel一樣,超過24小時

例如:

General [h]:mm:ss [mm]:ss  [ss] 
    1.00000 24:00:00 1440:00   86400 
    1.00000 24:00:00 1440:00   86400 

SUM

2.00000 48:00:00 2880:00   172800 

對於T-SQL我將選擇

Without century (yy) (1) With century (yyyy) Standard Input/Output (3) 
    14        114     - hh:mi:ss:mmm(24h) 

或默認108,我挑剔的是我必須重新創建功能可以做 hh:mi:ss:mmm+ 24h)?

評論是非常受歡迎的;

回答

3

雖然SQL Server的time數據類型應該是map to the CLR's timespan datatype,但它只支持少於24小時的間隔。

SQL Server的datediff在計算時間間隔方面也很棘手,因爲它計算兩個日期時間間隔的日期部分邊界。舉例來說,這應該是1秒的間隔,但DATEDIFF會告訴你這是一個小時,如果你問了好幾個小時:

select datediff(hh, '2013-01-01T23:59:59', '2013-01-02T00:00:00') 
-- Returns 1 

因此,您可能需要推出自己的功能,當談到這一點,雖然希望 this answer可能讓你開始:

-- Setup test data 
declare @minDate datetime = '2012-12-12 20:16:47.160' 
declare @maxDate datetime = '2012-12-17 15:10:12.050' 

-- Get timespan in hh:mi:ss 
select cast(
     (cast(cast(@maxDate as float) - cast(@minDate as float) as int) * 24) /* hours over 24 */ 
     + datepart(hh, @maxDate - @minDate) /* hours */ 
     as varchar(10)) 
    + ':' + right('0' + cast(datepart(mi, @maxDate - @minDate) as varchar(2)), 2) /* minutes */ 
    + ':' + right('0' + cast(datepart(ss, @maxDate - @minDate) as varchar(2)), 2) /* seconds */ 

-- Returns 114:53:24 
+0

將嘗試這一點,與我的夥伴交談,看到TI如何實現它,因爲我們已經在小數數據,但確實是一個良好的開端! –

+0

我永遠不會認爲T-SQL'time'應該映射到客戶端的時間跨度類型。我一直認爲它是一個時間點,就像'datetime'或'datetime2',但沒有日期部分。感謝那個打開(或者說*擴大了*)我的眼睛的鏈接。 –

相關問題