Verständnis-Frage zur security3.fdb

Forum für Fragen rund um die Installation, Konfiguration und Inbetriebnahme von Firebird.

Moderator: martin.koeditz

Benutzeravatar
martin.koeditz
Beiträge: 377
Registriert: Sa 31. Mär 2018, 14:35

Hier geht es um die Genauigkeit. Im Timestamp sind ohnehin die Millisekunden enthalten. NOW bildet diese auf tausendstel Sekunden ab.

Ich habe hier mal einen Auszug aus meiner FB 3.0-Datenbank:

Code: Alles auswählen

select cast('NOW' as timestamp),  -- 30.11.2022, 16:16:27.619	
current_timestamp as TS,      -- 30.11.2022, 16:16:27.619
current_timestamp(0) as TS0,  -- 30.11.2022, 16:16:27.000	
current_timestamp(1) as TS1,  -- 30.11.2022, 16:16:27.600
current_timestamp(2) as TS2,  -- 30.11.2022, 16:16:27.610
current_timestamp(3) as TS3   -- 30.11.2022, 16:16:27.619
from rdb$database
Hieran kann man erkennen, wie die Rundungen arbeiten. Ohne explizite Angabe der Genauigkeit, wird auf drei Nachkommastellen gerundet. Dieses Verhalten ist für Firebird 3.0 und 4.0 identisch.

Gruß
Martin
Martin Köditz
it & synergy GmbH
bfuerchau
Beiträge: 388
Registriert: Mo 7. Mai 2018, 18:09

Übrigens eine wichtige Erkenntnis:
Die Now-Abfrage (so wie alle anderen Current_xxx) werden im SQL genau nur 1x abgefragt.
Bei einem "Insert into select from " erhalten alle SQL's denselben Wert, auch wenn es länger dauert.
Dies kann man nur mit einer SQL-Function umgehen, da die bei jedem Datensatz aufgerufen wird.
Antworten