SSRS 2008时间格式

时间:2013-09-19 19:50:31

标签: sql-server-2008 ssrs-2008

我正在尝试将字符串格式化为报表服务项目中的一小时。我试图找出给定日期(date1)和16:30(标志着工作日结束)的小时之间的差异。简单地说:16:30 - 小时我正在使用下面的DateDiff公式:

= DateDiff(Dateinterval.Hour, Hour("16:30"), Hour(Fields!Date1.Value))

但是,在我预览报表时,上面的公式会引发错误。有人可以帮助我找到正确的公式吗?

1 个答案:

答案 0 :(得分:0)

正如其他评论所提到的,您需要比较DateDiff表达式中的两个日期时间。

要执行此操作,您需要第一个日期,即 16:30 时间,以第二个日期为基础。这样做的一种方法是:

=DateDiff(DateInterval.Hour
    , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
    , Fields!Date1.Value)

基于此,您可以轻松地将其增强为仅返回日期与时间差异的差异>的 16:30

=IIf(DateDiff(DateInterval.Hour
        , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
        , Fields!Date1.Value) > 0
    , DateDiff(DateInterval.Hour
        , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
        , Fields!Date1.Value)
    , 0)

您甚至可以将差异格式设置为 HH:mm

=CStr(CInt(IIf(DateDiff(DateInterval.Minute
        , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
        , Fields!Date1.Value) > 0
    , DateDiff(DateInterval.Minute
        , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
        , Fields!Date1.Value)
    , 0) / 60))
    & ":"
    & CStr(IIf(DateDiff(DateInterval.Minute
            , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
            , Fields!Date1.Value) > 0
        , DateDiff(DateInterval.Minute
            , CDate(Format(Fields!Date1.Value, "yyyy-MM-dd") & "T16:30:00")
            , Fields!Date1.Value)
        , 0) mod 60)

使用计算字段可以大大简化最后两个表达式,以计算时差,但这个答案已经足够长了。

你可以看到这对我有用:

enter image description here