2014-03-04 60 views
0

100個鹼基格式我想計算兩個日期之間的時間的時間差,但分鐘應該在.100規模也就是說,如果日期時間差2.30 (2 Hours 30 Minutes)我希望它在格式2.50轉換DATEDIFF分鐘到SQL

30分鐘= 0.50

我寫了一個查詢,但是當分在範圍內01 - 09

案例1中它不能很好地工作:輸出錯誤

Declare @Start DateTime='02-03-2014 14:25:00' 
Declare @End DateTime='02-03-2014 20:29:46' 

Select STR(DateDiff(MINUTE,@Start,@End)/60)+'.'+STR(DateDiff(MINUTE,@Start,@End)%60/0.6) 

日期時間差異:6.04 預期輸出:6.10 實際輸出:6.7

情況2:正確的輸出

Declare @Start DateTime='02-03-2014 13:55:02' 
Declare @End DateTime='02-03-2014 17:33:31' 

Select STR(DateDiff(MINUTE,@Start,@End)/60)+'.'+STR(DateDiff(MINUTE,@Start,@End)%60/0.6) 

日期時間差異:3.38 預期輸出:6.63 實際輸出:6.63

我在失蹤的情況下,當分鐘少於10?

DB:SQL Server 2008中

回答

1

60分鐘= 60/60 = 1.0

30分鐘= 30/60 = 0.5

4分鐘= 4/60 = 0.066,不0.10

0.10 = 6分鐘,不4分鐘如在冷杉差例如。

如果我們暫時卸下秒內降低複雜性,那麼你只需3600.00劃分秒:

Declare @Start DateTime='02-03-2014 14:25:00' 
Declare @End DateTime='02-03-2014 20:29:00' 

SELECT DATEDIFF(s,@Start,@End)/3600.00 

這將返回6.066這是小時返回6小時4分差遠了正確的部分更簡單的表達。

1

似乎在STR(DateDiff(MINUTE,@Start,@End)%60/0.6) 0.6應爲6.0

代替小數點後的上述解決方案將四捨五入高達1處。

如果你想ROUND關到小數點後2位,你可以試試下面的代碼片段:

SELECT CAST(CAST(ROUND(DateDiff(MINUTE,@Start,@End)%60/0.6) AS NUMERIC(12,2)) AS VARCHAR(50)) 
+0

案例2會產生錯誤的結果,那麼,而不是'6.63'它給我的'6.6' – Shaggy

+0

這是因爲四捨五入返回VARCHAR STR功能的影響(1)。你需要四捨五入到兩個地方?在這種情況下,你已經給第一個例子的結果應該是6.07而不是6.10,讓我知道。 –

1

試試這個,它應該給一個非常精確的結果(四捨五入後):

Declare @Start DateTime='02-03-2014 13:55:02' 
Declare @End DateTime='02-03-2014 17:33:31' 

Select round(cast(@[email protected] as float)*24, 2) 

使用這個,如果你想四捨五入

Select floor(cast(@[email protected] as float)*2400)/100 
1

我的朋友下面是你需要的表格演示。

1 1.666666667 
2 3.333333333 
3 5 
4 6.666666667 
5 8.333333333 
6 10 
7 11.66666667 
8 13.33333333 
9 15 
10 16.66666667 
11 18.33333333 
12 20 
13 21.66666667 
14 23.33333333 
15 25 
16 26.66666667 
17 28.33333333 
18 30 
19 31.66666667 
20 33.33333333 
21 35 
22 36.66666667 
23 38.33333333 
24 40 
25 41.66666667 
26 43.33333333 
27 45 
28 46.66666667 
29 48.33333333 
30 50 
31 51.66666667 
32 53.33333333 
33 55 
34 56.66666667 
35 58.33333333 
36 60 
37 61.66666667 
38 63.33333333 
39 65 
40 66.66666667 
41 68.33333333 
42 70 
43 71.66666667 
44 73.33333333 
45 75 
46 76.66666667 
47 78.33333333 
48 80 
49 81.66666667 
50 83.33333333 
51 85 
52 86.66666667 
53 88.33333333 
54 90 
55 91.66666667 
56 93.33333333 
57 95 
58 96.66666667 
59 98.33333333 
60 100 

在第一種情況下,您的實際區別是6小時& 4分鐘。所以根據要求,6.07是正確的,你是怎麼說這是錯誤的?

+0

它不是'6.07'是'6.07' – Shaggy