时间戳转换为日期,时间和持续时间计算

时间:2016-06-09 20:59:24

标签: sql tableau

我已安排任务表,其中存储计划任务ID,类型,exec_time,end_time等...

我将exec / end time作为时间戳。

对于BI目的,我需要以某种方式计算持续时间(end_time - exec_time)并以hh:mm:ss返回。

exec / end_time的格式为dd / mm / yy hh:mm:ss:miliseconds o' clock。

请帮我解决这个问题。 提前致谢! 史蒂夫

1 个答案:

答案 0 :(得分:0)

您可以使用计算字段在Tableau中执行此操作。这可能不如您在DBMS中所做的那样优雅;但它会起作用:

RIGHT("0" + STR(INT(DATEDIFF("second",[Exec Time],[End Time]) / 60)),2)
+ ":" +
RIGHT("0" + STR(INT((DATEDIFF("second",[Exec Time],[End Time]) % 6000) / 60)),2)
+ ":" +
RIGHT("0" + STR(INT((DATEDIFF("second",[Exec Time],[End Time]) % 600))),2)

“持续时间”是我的屏幕截图中的计算字段:

enter image description here

更新 - 根据其他评论 -

为时间衡量

MAKETIME(
   INT(DATEDIFF("second",[Exec Time],[End Time]) / 60),
   INT((DATEDIFF("second",[Exec Time],[End Time]) % 6000) / 60),
   INT((DATEDIFF("second",[Exec Time],[End Time]) % 600))
)

其他详细信息 - 为您解答后续问题`

如果您要随时间进行任何计算,则应使用datenumeric。例如,由于您关注的最小时间单位是秒,因此您可以在计算中使用DATEDIFF("second",[Exec Time],[End Time])来添加或删除时间(以秒为单位)。 或者,只需使用内置日期函数DATEADDDATEDIFF等。

如果您想以这种格式hh:mm:ss显示持续时间,那么您需要创建一个字符串,就像我上面所做的那样。原因是因为如果持续时间超过24小时,那么只有time元素才能恰当地表示它 - 因为整整一天(​​或更长时间)已经过去了。

在上面(非常顶部)的计算中,我用“0”左键填充小时,分钟和秒钟,但只选择最右边的2个字符。这意味着如果某个值只是一位数,则之前会添加0。如果该值已经是2位数,则不会在结果中更改。因此,1变为01,但13保持13

我强烈建议您使用这些解决方案并对其进行测试,以确保您了解它们的工作原理。