2016-08-31 2 views
0

Kann mir jemand helfen, warum diese Formel nicht funktioniert? Ich habe zwei Spalten, Time Start und Time Finish, ich möchte den Unterschied in Stunden zwischen ihnen finden.OBIEE Zeitunterschied zwischen zwei Spalten

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

Ich erhalte den Fehler als solche:

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) 

UPDATE: Die beiden Spalten sind reines Textformat, aber ich brauche den Unterschied zwischen ihnen zu finden: Eg: 17: 00-9: 00 = 8 Stunden

Antwort

1

Sie müssen Ihre Spalten nicht vor der Ausführung von TIMESTAMPDIFF umwandeln? Das ist der Fehler: Sie haben einen inkompatiblen Typ. Sie müssen TIMESTAMPDIFF ausführen (sql_tsi_second, cast (...), cast (...)). Hoffe, das funktioniert!

+0

Genau. Sie können nicht erwarten, eine TIME-Operation für einen STRING durchzuführen. – jackohug

1

Die vorherige Antwort von @ m-beerden ist korrekt, da Sie keine Zeichenfolge an timestampdiff übergeben können. Sie müssen es zuerst in ein korrektes Datum-Uhrzeit-Format konvertieren.

Es gibt ein paar andere Probleme mit Ihrer Formel obwohl. Durch Übergeben der Beendigungszeit als Argument vor der Startzeit gibt TIMESTAMPDIFF eine negative Zahl zurück. Wenn die Zeiten genau 8 Stunden auseinander lagen, wäre dies -28800.

Weiter Sie MOD auf diese ausführen, mit 3600. MOD(28800, 3600) wird 0 zurück Wenn Sie wirklich die Anzahl der Stunden möchten, können Sie SQL_TSI_HOUR verwenden können oder müssen Sie durch 3600 teilen, nicht durch mod.

Verwandte Themen