OBIEE两列之间的时差

时间:2016-08-31 07:57:54

标签: oracle timestamp obiee

任何人都可以帮我解释为什么这个公式不起作用? 我有两列,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小时

2 个答案:

答案 0 :(得分:1)

在运行TIMESTAMPDIFF之前,您是否需要投射列?这就是错误所说的:你有一个不兼容的类型。你需要做TIMESTAMPDIFF(sql_tsi_second,cast(...),cast(...))。希望这有效!

答案 1 :(得分:1)

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

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

接下来,你正在使用3600执行MODMOD( 28800, 3600 )将返回0.如果你真的想要小时数,你可以使用SQL_TSI_HOUR或者你需要除以3600,而不是由它改造。