Datumsberechnung mit Interbase (Firebird)



  • Hallo,
    ich habe eine Frage zur Datumsberechnung in einer IB-Datenbank.
    Ich habe zwei Daten, dessen Differenz ich errechnen möchte.
    Datum 1: 30.03.2016 13:55:01
    Datum 2: 31.03.2016 07:15:00

    Ich habe dazu datediff() gefunden. Leider bekomme ich immer eine Fehlermeldung, mit der ich nichts anfangen kann? Ich versuche folgendes:

    datediff (MINUTE, timestamp '30.03.2016 13:55:01', timestamp '31.03.2016 07:15:00')
    

    Dabei bekomme ich diesen Fehler:

    Can't format message 13:896 -- message file c:\Program Files\Borland\InterBase/interbase.msg not found.
    Dynamic SQL Error.
    SQL error code = -104.
    Token unknown - line 1, char 1.
    Datediff.

    Auch mit einem select davor bekomme ich einen Fehler:

    Dynamic SQL Error.
    SQL error code = -104.
    As approximate floating-point values in SQL dialect 1, but as 64-bit.

    Danke
    Torsten



  • Vermutlich weil die verwendete Query-Komponente das nicht kann.

    Was verwendest Du denn für den Zugriff. Ich musste damals auf die IB_OBJECTS zurückgreifen, weil die Standardkomponenten im BCB 6 keine DSQL- oder PSQL-Statements ausführen können.



  • Es scheitert schon daran den SQL-String im "SQL Manager Lite for InterBase and Firebird" abzusetzen.
    Denn diesen möchte ich als Prozedur in der DB ablegen und aus meiner Anwendung heraus aufrufen.

    So der Plan...



  • Ich vermute dass '30.03.2016 13:55:01' kein gültiges "timestamp" Format ist.
    Versuchs mal mit '2016-03-30 13:55:01' bzw. '2016-03-30 13:55:01.000' .
    Und versuch's mal ohne dem "timestamp" davor, also einfach

    SELECT datediff(MINUTE, '2016-03-30 13:55:01', '2016-03-31 07:15:00');
    Wenn das nicht geht evtl. mit nem CAST

    SELECT datediff(MINUTE, CAST('2016-03-30 13:55:01' AS TIMESTAMP), CAST('2016-03-31 07:15:00' AS TIMESTAMP));

    Einfach bisschen rumprobieren.



  • Hallo,
    ich kann eingeben wass ich will, ich bekomme einfach kein Ergebnis.
    Es erscheint immer folgender Fehler:

    Can't format message 13:896 -- message file c:\Program Files\Borland\InterBase/interbase.msg not found.
    Dynamic SQL Error.
    SQL error code = -104.
    As approximate floating-point values in SQL dialect 1, but as 64-bit.

    Gruß
    Torsten



  • Kann es sein, daß da noch ein älterer FB Client benutzt wird, s.a. Wrong error message on FB2.1 64 Linux?



  • Bei mir funzt das so (Firebird 2.5)

    SELECT datediff(MINUTE, cast('2016-03-30 13:55:01' as TIMESTAMP), cast('2016-03-31 07:15:00' as TIMESTAMP)) from DUMMY;
    

    Ergebnis: 1040

    Ich muss das natürlich gegen irgendwas selektieren. In diesem Fall die "DUMMY" Tabelle, die einen einzelnen Datensatz enthält. (Kannst auch FROM RDB$DATABASE oder sowas nehmen)


Log in to reply