2014-03-04 61 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