如何在水晶报告中计算大于24小时的时间间隔

时间:2016-02-11 19:45:18

标签: sql-server time crystal-reports

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

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

这是创建的,因为我们遇到的问题是Dates和Times被存储为数据库中的单独值。 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的时间间隔。提前感谢您的指导和建议。

2 个答案:

答案 0 :(得分:0)

水晶

   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

答案 1 :(得分:0)

尝试我的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} )