在sql中将datediff分钟转换为100基本格式

时间:2014-03-04 10:00:52

标签: sql sql-server sql-server-2008

我想计算两个日期之间的日期时差,但是分钟应该是.100比例,即如果日期时差为2.30 (2 Hours 30 Minutes)我希望格式为2.50

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?

数据库:SQL Server 2008

4 个答案:

答案 0 :(得分:1)

STR(DateDiff(MINUTE,@Start,@End)%60/0.6) 0.6似乎应该用6.0替换

上述解决方案将在小数点后四舍五入。

如果您希望将ROUND关闭到小数点后的2个位置,可以尝试下面的代码段:

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

答案 1 :(得分: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分钟的差异和更简单的表达。

答案 2 :(得分:1)

试试这个,它应该给出一个非常精确的结果(在四舍五入后):

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

Select round(cast(@end-@start as float)*24, 2)

如果要向下舍入

,请使用此选项
Select floor(cast(@end-@start as float)*2400) / 100

答案 3 :(得分: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的要求,你是如何说它是错的?