两列之间的 OBIEE 时差

OBIEE Time Difference between two columns

谁能帮我解释为什么这个公式不起作用? 我有两列,Time Start 和 Time Finish,我想找出它们之间的小时差。

cast(floor(mod(TIMESTAMPDIFF(sql_tsi_second, "Worker"."Time Normal Finish","Worker"."Time Normal Start"),3600) /60)as char)

我收到这样的错误:

Formula syntax is invalid.
[nQSError: 10058] A general error has occurred. [nQSError: 43113] Message returned from OBIS. [nQSError: 22025] Function TimestampDiff is called with an incompatible type. (HY000)
SQL Issued: SELECT cast( floor( mod(TIMESTAMPDIFF(sql_tsi_second, "Worker"."Time Normal Finish","Worker"."Time Normal Start"),3600) /60) as char) FROM "Workforce Management - Absence Real Time"
OK (Ignore Error)

更新: 这两列是纯文本格式,但我需要找出它们之间的区别: 例如:17:00-9:00=8 小时

在 运行 TIMESTAMPDIFF 之前不需要转换您的专栏吗?这就是错误所说的:你有一个不兼容的类型。您需要执行 TIMESTAMPDIFF(sql_tsi_second, cast( ...), cast(...))。希望这有效!

@m-beerden 之前的回答是正确的,因为您不能将字符串传递给 timestampdiff。您需要先将其转换为正确的日期时间格式。

不过,您的公式还有一些其他问题。通过在开始时间之前将结束时间作为参数传递,TIMESTAMPDIFF 将 return 为负数。如果时间恰好相隔 8 小时,则为 -28800。

接下来你要对此执行MOD,3600。MOD( 28800, 3600 )将return 0。如果你真的想要小时数,你可以使用SQL_TSI_HOUR 或者您需要除以 3600,而不是 mod。