Tsql 在Business Objects Desktop Intelligence(BO Deski)中格式化时间跨度

Tsql 在Business Objects Desktop Intelligence(BO Deski)中格式化时间跨度,tsql,reporting,business-objects,timespan,Tsql,Reporting,Business Objects,Timespan,有谁能告诉我如何将给定的秒数(例如16742秒)格式化为人类可读的格式(例如1d 5h 2m 13s) 使用BO字段公式 或 在T-SQL SELECT语句中(其中持续时间(秒)来自总和聚合) 我个人会为此制作一个TSQL函数。以下是您可以调整的示例: IF(OBJECT_ID('FN_STRING_TO_TIME', 'FN') IS NOT NULL) DROP FUNCTION FN_STRING_TO_TIME GO CREATE FUNCTION dbo.FN_STRING

有谁能告诉我如何将给定的秒数(例如16742秒)格式化为人类可读的格式(例如1d 5h 2m 13s)

  • 使用BO字段公式
  • 在T-SQL SELECT语句中(其中持续时间(秒)来自总和聚合)

    • 我个人会为此制作一个TSQL函数。以下是您可以调整的示例:

      IF(OBJECT_ID('FN_STRING_TO_TIME', 'FN') IS NOT NULL)
          DROP FUNCTION FN_STRING_TO_TIME
      GO
      
      CREATE FUNCTION dbo.FN_STRING_TO_TIME( 
      
          -- Seconds to convert
          @pSeconds   INT
      )
      RETURNS VARCHAR(12)
      ---------------------------------------------------------------------------------------
      -- Developer:       Linus Brimstedt
      -- Date:        2009-03-17
      --
      -- Function:        Returns the given seconds in H:MM:SS format
      --          
      -- Output:          String in format H:MM:SS
      --          
      ---------------------------------------------------------------------------------------
      BEGIN
      
      -----------------------------
      -- Variables
      -----------------------------
      
          DECLARE @output     VARCHAR(30) -- Describe the variables
      
          DECLARE @minutes    INT
          DECLARE @hours      INT
      
      -----------------------------
      -- Implementation
      -----------------------------
      
          SET @minutes = @pSeconds / 60
          SET @pSeconds = @pSeconds % 60
      
          SET @hours = @minutes / 60
          SET @minutes = @minutes % 60
      
      -----------------------------
      -- Return output
      -----------------------------
          RETURN  CAST(@hours AS VARCHAR) + ':'
          +   dbo.FN_STRING_LPAD(@minutes, 2, '0') + ':'
          +   dbo.FN_STRING_LPAD(@pSeconds, 2, '0') 
      END
      GO
      
      -- Test
      DECLARE @seconds    INT
      ,   @got        VARCHAR(12)
      ,   @expected   VARCHAR(12)
      
      SELECT  @seconds = 67
      ,   @expected = '0:01:07'
      SET @got = dbo.FN_STRING_TO_TIME(@seconds)
      
      IF(@got != @expected)
          RAISERROR('FN_STRING_TO_TIME(%d) returned bad value: Expected: %s, got %s', 11, 11, @seconds, @expected, @got)
      
      SELECT  @seconds = 60 * 60 * 7 + 60 * 14 + 34
      ,   @expected = '7:14:34'
      SET @got = dbo.FN_STRING_TO_TIME(@seconds)
      
      IF(@got != @expected)
          RAISERROR('FN_STRING_TO_TIME(%d) returned bad value: Expected: %s, got %s', 11, 11, @seconds, @expected, @got)
      
      干杯
      /L

      我已经用Deski和四个变量完成了。 从小时度量开始,创建一些变量,在下面的my year变量是vYears,my Month变量是vMonths,my days变量是vDays,my hours变量是vHours

      vYears使用以下计算:

      =Floor(Sum(<Hours Billed by Date Billed>/24)/365.25)
      
      =楼层(总和(/24)/365.25)
      
      vWeeks使用以下计算:

      =Floor(Sum((Sum(<Hours Billed by Date Billed>/24)/365.25)-<vYears>)*365.25/7)
      
      =Floor(Sum(Sum((Sum(<Hours Billed by Date Billed>/24)/365.25)-<vYears>)*365.25/7-<vWeeks>)*52/24)
      
      =Truncate(Sum((Sum(Sum((Sum(<Hours Billed by Date Billed>/24)/365)-<vYears>)*365/7-<vWeeks>)*52/24-<vDays>)*24) , 2)
      
      =楼层(总和((总和(/24)/365.25)-)*365.25/7
      
      vDays使用以下计算:

      =Floor(Sum((Sum(<Hours Billed by Date Billed>/24)/365.25)-<vYears>)*365.25/7)
      
      =Floor(Sum(Sum((Sum(<Hours Billed by Date Billed>/24)/365.25)-<vYears>)*365.25/7-<vWeeks>)*52/24)
      
      =Truncate(Sum((Sum(Sum((Sum(<Hours Billed by Date Billed>/24)/365)-<vYears>)*365/7-<vWeeks>)*52/24-<vDays>)*24) , 2)
      
      =楼层(Sum(Sum((Sum(/24)/365.25)-)*365.25/7-*52/24)
      
      vHours使用以下计算:

      =Floor(Sum((Sum(<Hours Billed by Date Billed>/24)/365.25)-<vYears>)*365.25/7)
      
      =Floor(Sum(Sum((Sum(<Hours Billed by Date Billed>/24)/365.25)-<vYears>)*365.25/7-<vWeeks>)*52/24)
      
      =Truncate(Sum((Sum(Sum((Sum(<Hours Billed by Date Billed>/24)/365)-<vYears>)*365/7-<vWeeks>)*52/24-<vDays>)*24) , 2)
      
      =截断(Sum((Sum((Sum(/24)/365)-)*365/7-*52/24-*24),2)
      
      然后,我可以通过执行以下操作输出这些变量:

      =<vYears>+" Years "+<vWeeks>+" Weeks "+<vDays>+" Days "+<vHours>+" Hours"
      
      =+“年”+“周”+“天”+“小时”
      
      如果您需要进一步的信息,请不要犹豫询问

      谢谢


      Matt

      谢谢,但不幸的是,这不能在BO Deski的SELECT语句中内联使用。要是这么简单就好了!好的,我从来没有用过生化需氧量。是不是有点像BO Crystal Reports?在CR中,做类似的事情相当简单。。。在BOD中使用它有什么问题,它不允许自定义查询?