2013-12-20 60 views
0

我在其中一個表中有樹列:簽入時間和簽出時間以及計費時間。入住&退房是date列,billableHoursvarchar並想格式化如下:HH:MM如何在SQL Server中減去兩個日期列並計算持續時間

我可以用下面的查詢

SELECT CONVERT(VARCHAR, (Checkout - checkIn), 108) 
FROM WorkTrackingLog 

但它返回HH:MM:SS

問題1:

如何減去結帳簽入,並以這種格式得到billableHours - HH:MM

現在一旦我從辦理登機手續&退房日期得到HH:MM,我想添加HH:MM並在其他表中獲取totalDuration。

例如可以說我有三個記錄:

表1:

TicketId | billableHours 
1001 | 05:04 
1001 | 12:19 
1001 | 02:16 

表#2

TicketId | totalDuration 
1001 | 19:39 

問題2

如何轉換HH:Mmint並將多個記錄一起添加到g et totalDuration。總持續時間可以是varchar格式。

有意義嗎?

非常感謝您的意見和反饋。

+2

**不要存放格式化的數據;存儲原始數據**使用數字/浮點類型爲小時和小數小時,或使用整數類型爲分鐘。只在將數據顯示給最終用戶時格式化。 –

+0

並使用**適當的數據類型**!如果您需要存儲數值(如「billableHours」),請將它們存儲在數字數據類型中,而不是「varchar」!如果這些數據存儲爲數字,那麼將它們總結爲'totalDuration'即可 –

回答

1

這應該工作

問題#1

SELECT CONVERT(varchar(5), 
    DATEADD(minute, DATEDIFF(minute, CheckOut, CheckIn), 0), 114) 

問題2

SELECT CONVERT(varchar(5), SUM(Datediff(minute,convert(datetime,'00:00:00',108), 
    convert(datetime,BillableHours,108))), 114) 
GROUP BY TicketId