Firebird Documentation IndexFirebird 2.5 SprachreferenzDatentypen und Unterdatentypen → Datentypen für Datum und Zeit
Firebird Home Firebird Home Zurück: Festkomma-DatentypenFirebird Documentation IndexNach oben: Datentypen und UnterdatentypenWeiter: Zeichendatentypen

Datentypen für Datum und Zeit

Inhaltsverzeichnis

DATE
TIME
TIMESTAMP
Operationen, die Datums- und Zeitwerte verwenden

Die Datentypen DATE, TIME und TIMESTAMP werden zur Arbeit mit Daten verwendet, die Daten und Zeiten beinhalten. Dialekt 3 unterstützt alle drei Typen, während Dialekt 1 nur DATE kennt. Der Datentyp DATE in Dialekt 3 ist „nur Datum“, wohingegen der Datentyp DATE in Dialekt 1 Datum und Tageszeit speichert. Somit ist dieser equivalent zu TIMESTAMP in Dialekt 3. Dialekt 1 kennt keinen „nur Datum“-Typ.

Anmerkung

In Dialekt 1 können DATE-Daten alternativ als TIMESTAMP definiert werden. Dies ist die empfohlene Anwendung für neue Definitionen in Dialekt 1-Datenbanken.

Sekundenbruchteile: Werden Sekundenbruchteile in Datums- und Zeitfeldern benötigt, speichert Firebird diese in zehntausendstel Sekunden. Wird eine geringere Genauigkeit bevorzugt, kann diese explizit als tausendstel, hundertstel oder zehntel Sekunde in Dialekt 3-Datenbanken ab ODS 11 spezifiziert werden.

Einige nützliche Informationen zur Genauigkeit von Sekundenbruchteilen:

Der Zeitanteil eines TIME- oder TIMESTAMP-Datentyps ist ein 4-Byte WORD, mit Raum für Dezimalsekunden-Genauigkeit. Die Zeitwerte werden als Dezimalmillisekunden ab Mitternacht gespeichert. Die derzeitige Genauigkeit dieser Werte, die mittels Zeit(stempel)-Funktionen oder -Variablen gelesen oder geschrieben werden ist:

  • CURRENT_TIME nutzt standardmäßig Sekundengenauigkeit und kann bis zu Millisekundengenauigkeit definiert werden:  CURRENT_TIME (0|1|2|3) 
  • CURRENT_TIMESTAMP Millisekundengenauigkeit. Genauigkeit von Sekunden bis zu Millisekunden kann mit  CURRENT_TIMESTAMP (0|1|2|3)  definiert werden.
  • Literal 'NOW': Millisekundengenauigkeit
  • Die Funktionen DATEADD() und DATEDIFF() unterstützen die Genauigkeit bis zu Millisekunden. Dezimalmillisekunden können definiert werden, diese werden jedoch auf die nächste Ganzzahl gerundet, bevor weitere Operationen durchgeführt werden.
  • Die Funktion EXTRACT() gibt die Genauigkeit bis auf Dezimalmillisekunden zurück, wenn die Argumente SECOND und MILLISECOND verwendet werden.
  • Für die Literale TIME und TIMESTAMP akzeptiert Firebird glücklicherweise Genauigkeiten bis zu Dezimalmillisekunden, schneidet (nicht rundet) den Zeitteil jedoch auf die nächste, untere oder gleiche Millisekunde ab. Versuchen Sie beispielsweise  SELECT TIME '14:37:54.1249' FROM rdb$database
  • werden Sie feststellen, dass die Operatoren '+' und '-' mit Dezimalmillisekunden-Genauigkeit arbeiten, jedoch nur innerhalb des Ausdrucks. Sobald irgendwas gespeichert oder nur von RDB$DATABASE abgefragt (SELECTed) wird, wandelt sich die Genauigkeit zu Millisekunden.

Die Genauigkeit auf Basis von Dezimalmillisekunden ist selten und wird derzeit nicht in Spalten oder Variablen gespeichert. Obwohl Firebird die Werte von TIME und den Zeitteil von TIMESTAMP als Dezimalmillisekunden (10-4 Sekunden) seit Mitternacht speichert, kann die Genauigkeit von Sekunden zu Millisekunden variieren.

DATE

Der Datentyp DATE in Dialekt 3 speichert nur das Datum ohne Zeitangabe. Der verfügbare Bereich reicht vom 1. Januar 0001 bis zum 31. Dezember 9999.

In Dialekt 1 gibt es keinen „nur Datum“-Datentyp.

Tipp

In Dialekt 1, erhalten Datums-Literale ohne Zeitangabe, genauso wie 'TODAY', 'YESTERDAY' und 'TOMORROW' automatisch einen Null-Zeitteil.

Sollte es für Sie wichtig sein, aus welchem Grund auch immer, einen Zeitstempel-Literal mit einem expliziten Null-Zeitteil in Dialekt 1 zu speichern, wird die Datenbank ein Literal wie '25.12.2016 00:00:00.0000' akzeptieren. Der Wert '25.12.2016' hätte jedoch den gleichen Effekt, mit weniger Tastenschlägen!

TIME

Der Datentyp TIME ist nur in Dialekt 3 verfügbar. Er speichert die Tageszeit im Bereich von 00:00:00.0000 bis 23:59:59.9999.

Sollten Sie den Zeitteil eines DATE in Dialekt 1 benötigen, können Sie die Funktion EXTRACT verwenden.

Beispielverwendung von EXTRACT

       EXTRACT (HOUR FROM DATE_FIELD)
       EXTRACT (MINUTE FROM DATE_FIELD)
       EXTRACT (SECOND FROM DATE_FIELD)
        

TIMESTAMP

Der Datentyp TIMESTAMP ist in Dialekt 1 und 3 verfügbar. Er besteht aus zwei 32-Bit-Teilen—einem Datums- und einem Zeitteil—womit eine Struktur gebildet wird, die sowohl Datum wie auch Tageszeit aufnimmt. Der Datentyp ist identisch mit DATE in Dialekt 1.

Die Funktion EXTRACT arbeitet für TIMESTAMP genauso wie für DATE in Dialekt 1.

Operationen, die Datums- und Zeitwerte verwenden

Das Verfahren zum Speichern der Datums- und Zeitwerte macht es möglich, diese als Operanden in arithmetischen Operationen zu verwenden. Gespeichert, wird ein Datumswert als Zahl seit dem „Datum Null“—17. November 1898— repräsentiert, ein Zeitwert als Anzahl der Sekunden (unter Berücksichtigung der Sekundenbruchteile) seit Mitternacht.

Ein Beispiel ist das Subtrahieren eines früheren Datum, einer Zeit oder eines Zeitstempels von einem späteren, was in einm Zeitintervall, in Tagen und Bruchteilen von Tagen resultiert.

Tabelle 3.3. Arithmetische Operationen für Datums- und Zeitdatentypen

Operand 1 Operation Operand 2 Ergebnis
DATE + TIME TIMESTAMP
DATE + Numerischer Wert n DATE um n ganze Tage erhöht. Gebrochene Werte werden auf die nächste Ganzzahl gerundet (nicht abgeschnitten).
TIME + DATE TIMESTAMP
TIME + Numerischer Wert n TIME um n Sekunden erhöht. Bruchteile werden berücksichtigt.
TIMESTAMP + Numerischer Wert n TIMESTAMP, wobei das Datum um die Anzahl der Tage und der Teil eines Tages durch die Zahl nrepräsentiert wird— somit wird „+ 2.75“ das Datum um 2 Tage und 18 Stunden weiterstellen wird
DATE - DATE Anzahl der vergangenen Tage innerhalb des Bereichs DECIMAL(9, 0)
DATE - Numerischer Wert n DATE um n ganze Tage reduziert. Gebrochene Werte werden auf die nächste Ganzzahl gerundet (nicht abgeschnitten).
TIME - TIME Anzahl der vergangenen Sekunden, innerhalb des Bereichs DECIMAL(9, 4)
TIME - Numerischer Wert n TIME um n Sekunden reduziert. Bruchteile werden berücksichtigt.
TIMESTAMP - TIMESTAMP Anzahl der Tage und der Tageszeit, innerhalb des Bereichs DECIMAL(18, 9)
TIMESTAMP - Numerischer Wert n TIMESTAMP wobei das Datum sich auf der Anzahl der Tage und der Tageszeit beruht, die durch die Zahl n repräsentiert wird—somit wird „- 2.25“ das Datum um 2 Tage und 6 Stunden reduzieren.


Hinweise

Der Datentyp DATE ist als TIMESTAMP in Dialekt 1 zu betrachten.

Siehe auch:  DATEADD, DATEADD

Zurück: Festkomma-DatentypenFirebird Documentation IndexNach oben: Datentypen und UnterdatentypenWeiter: Zeichendatentypen
Firebird Documentation IndexFirebird 2.5 SprachreferenzDatentypen und Unterdatentypen → Datentypen für Datum und Zeit