如何计算SSRS中2个DateTime字段之间的时间差

问题描述 投票:0回答:2

我正在做一份涉及图尔的报告。我有一列由tour_start_time 数据字段填充,另一列由tour_end_time 填充。然后我有一个名为“总时间”的专栏。总时间列需要以 hh:mm 格式告诉我tour_start_time 和tour_end_time 之间的区别是什么。因此,如果tour_start_time返回5:00并且tour_end_time返回5:06,那么总时间应该是0:06。我似乎无法理解这个和 DateDiff 的东西,我已经阅读了所有参考参数,这不是我正在使用的。我需要表格中的数据。我尝试过这个表达:

=DateDiff(minute,Fields!tour_start_time,Fields!tour_end_time)

但这不起作用,我尝试过的任何变体也不起作用。我知道我错过了一些东西,因为我对此不熟悉,所以很抱歉,如果这是一个愚蠢的问题,但我需要有人可以向我解释它,或者至少给我另一个功能来尝试。

datetime ssrs-2008 datediff
2个回答
14
投票

假设您的列实际上是 DateTime 数据类型,您的

DateDiff
表达式应如下所示:

=DateDiff(DateInterval.Minute, Fields!tour_start_time.Value, Fields!tour_end_time.Value)

=DateDiff("n", Fields!tour_start_time.Value, Fields!tour_end_time.Value)

VB.NET

DateDiff
需要
DateInterval
参数;您可以指定枚举器成员 (
DateInterval.Minute
) 或其字符串表示形式(即
"n"
表示分钟)。

这只会返回以分钟为单位的差异的整数值;听起来您需要将其更改为 HH:mm 字符串。在我的脑海中,最简单的方法是使用报告中的一些自定义代码,该代码将此整数值作为参数并基于此构造字符串。如果您需要这部分的更多信息,请告诉我。


0
投票

如果您想获取经过的小时、分钟和秒的持续时间,例如:

HH:mm:ss
,那么您可以使用如下所示的内容:

Format(
        Floor(DateDiff(DateInterval.Second,
                       Min(Fields!Updated.Value), 
                       Max(Fields!Updated.Value)
                      ) / (60*60)),
        "00") 
+ ":" + 
 Format(
        Floor((DateDiff(DateInterval.Second,
                 Min(Fields!Updated.Value),
                 Max(Fields!Updated.Value)
                ) -              
        Floor(DateDiff(DateInterval.Second,
                 Min(Fields!Updated.Value), 
                 Max(Fields!Updated.Value)
                ) / (60*60))*(60*60)) / 60),
        "00") 
+ ":" + 
 Format(
        (DateDiff(DateInterval.Second,
                 Min(Fields!Updated.Value),
                 Max(Fields!Updated.Value)
                ) -              
        Floor(DateDiff(DateInterval.Second,
                 Min(Fields!Updated.Value), 
                 Max(Fields!Updated.Value)
                ) / (60*60))*(60*60)) Mod 60,
        "00")

如果你可以使用临时变量,这会更容易理解,但由于一切都必须一次性完成,所以必须是上面的。 然而,分解它是这样的:

Format(
        Floor(DateDiff(DateInterval.Second,
                       Min(Fields!Updated.Value), 
                       Max(Fields!Updated.Value)
                      ) / (60*60)),
        "00") 

为您提供更新时的最小值和最大值之间的秒数,然后除以 60 得到分钟,再除以 60 得到小时。

 Format(
        Floor((DateDiff(DateInterval.Second,
                 Min(Fields!Updated.Value),
                 Max(Fields!Updated.Value)
                ) -              
        Floor(DateDiff(DateInterval.Second,
                 Min(Fields!Updated.Value), 
                 Max(Fields!Updated.Value)
                ) / (60*60))*(60*60)) / 60),
        "00") 

给出总秒数减去小时部分,再乘以分钟和小时,然后再除以小时。

 Format(
        (DateDiff(DateInterval.Second,
                 Min(Fields!Updated.Value),
                 Max(Fields!Updated.Value)
                ) -              
        Floor(DateDiff(DateInterval.Second,
                 Min(Fields!Updated.Value), 
                 Max(Fields!Updated.Value)
                ) / (60*60))*(60*60)) Mod 60,
        "00")

为您提供总秒数减去适合此计算的小时数的余数。

© www.soinside.com 2019 - 2024. All rights reserved.