【问题标题】:how to calculate a time interval greater than 24 hours in crystal reports如何在水晶报表中计算大于 24 小时的时间间隔
【发布时间】:2016-02-11 19:45:17
【问题描述】:

如果在其他地方讨论过这个问题,请原谅我,我只是不知道如何问这个问题。 我的问题是;如何计算大于 24 小时的时间间隔。我有一个由 2 个其他公式组成的公式,如下所示:

    Time({%EMS_Departed_DateTime}) - Time ({%Pt_Arrival_DateTme})

之所以创建它,是因为我们在将日期和时间作为单独的值存储在数据库中时遇到了问题。 SQL 表达式如下所示:

    CAST(
         CONVERT(Varchar(10),PT_ArrivedAtED,112)+ ' '  +
         CONVERT(Varchar(8),PT_ArrivedAtED_Time) AS DateTime)

我需要的是一个时间间隔的计算,表示为:

HH:mm:ss

我做了一些研究,发现了这个:

    WhilePrintingRecords; 
    NumberVar TotalSec :=({@LengthofStay_Time}); 
    NumberVar Days    := Truncate  (TotalSec / 86400); 
    NumberVar Hours   := Truncate  (Remainder ( TotalSec , 86400) / 3600) ; 
    NumberVar Minutes := Truncate  (Remainder ( TotalSec , 3600) / 60) ; 
    NumberVar Seconds := Remainder (TotalSec , 60) ; 

    Totext (Days ,     '00' ) +  ':' +
    Totext ( Hours ,   '00' ) +  ':' + 
    Totext ( Minutes , '00' ) +  ':' + 
    Totext ( Seconds , '00' )

这几乎可行。在所有这些被计算并转换为显示时间之后,我看到的是小时、分钟和秒。它不会计算天数(或者,最好是总小时数(即 2 天 = 48 小时)、分钟和秒数。我正在寻找关于如何编写公式或 SQL 表达式的建议/解决方案将计算从{%Pt_Arrival_DateTme} 到{%EMS_Departed_DateTime} 的时间间隔,显示为 HH:mm:ss。提前感谢您的指导和建议。

【问题讨论】:

  • 我想我没有提到最终的公式确实显示了计算的结果,但只是小时、分钟和秒,不超过 24 小时。 IE。应该显示为 31:25:42 的时间间隔显示为 7:25:42,因为它不会超过 24 小时。即使显示为 01:07:25:42 (dd:hh:mm:ss),我也会很高兴

标签: sql-server time crystal-reports


【解决方案1】:

水晶

   WhilePrintingRecords; 
    NumberVar TotalSec :=(60*60)*2; 
    NumberVar Hours   := Truncate  (Remainder ( TotalSec , 86400) / 60) ; 
    NumberVar Minutes := Truncate  (Remainder ( TotalSec , 3600) / 60) ; 
    NumberVar Seconds := Remainder (TotalSec , 60) ; 

    Totext ( Hours ,   '00' ) +  ':' + 
    Totext ( Minutes , '00' ) +  ':' + 
    Totext ( Seconds , '00' )

SQL

https://stackoverflow.com/questions/1262497/how-to-convert-seconds-to-hhmmss-using-t-sql

SQL server, Converting Seconds to Minutes, Hours, Days

【讨论】:

    【解决方案2】:

    试试我的ElapsedTime()函数:

    // Convert seconds to a string in the format DD.HH:MM:SS
    Function (NumberVar interval)
    
      NumberVar Days := Truncate(interval / 86400);
      NumberVar Hours := Truncate(Remainder(interval, 86400) / 3600);
      NumberVar Minutes := Truncate(Remainder(interval, 3600) / 60);
      NumberVar Seconds := Remainder(interval, 60);
      Totext(Days,'##') +'.'+ Totext(Hours,'00') +':'+ Totext(Minutes,'00') +':'+ Totext(Seconds,'00')
    

    用法:ElapsedTime ((24*60*60)+60)

    结果:1.00:01:00

    ** 编辑 **

    试试ElapsedTime( {%EMS_Departed_DateTime} - {%Pt_Arrival_DateTme} )

    【讨论】:

    • 这不起作用,但我想我知道为什么。我认为我的间隔不正确。我的间隔公式是:`Time({%EMS_Departed_DateTime}) Time({%Pt_Arrival_DateTme})` 括号外的Time是否可能不同?
    • 我只是在想我实际上需要这个在过去的 HH:mm:ss
    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-31
    • 2015-10-14
    • 2019-09-18
    相关资源
    最近更新 更多