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

Festkomma-Datentypen

Inhaltsverzeichnis

NUMERIC
DECIMAL

Festkomma-Datentypen sorgen für die Vorhersehbarkeit bei Multiplikations- und Divisionoperationen. Somit sind sie die erste Wahl zum Speichern monetärer Daten. Firebird implementiert zwei Festkomma-Datentypen: NUMERIC und DECIMAL. Gemäß dem Standard, werden beide Datentypen mit der Anzahl zu speichernder Stellen (Stellen nach dem Komma) begrenzt.

Verschiedene Behandlungen beschränken die Genauigkeit für jeden Typ: Die Genauigkeit für NUMERIC-Felder ist genau „wie deklariert“, wohingegen DECIMAL-Felder Zahlen akzeptieren, deren Genauigkeit mindestens der Deklaration entspricht.

Beispielsweise definiert NUMERIC(4, 2) eine Zahl mit insgesamt 4 Stellen und 2 Nachkommastellen; das heißt, es können bis zu zwei Stellen vor dem Komma und maximal 2 Stellen nach dem Komma verwendet werden. Wird die Zahl 3,1415 in ein Feld dieses Datentyps geschrieben, wird der Wert 3,14 gespeichert.

Die Art der Deklaration für Festkomma-Datentypen, zum Beispiel NUMERIC(p, s), ist beiden Typen gleich. Zu beachten ist, dass die Skalierung mittels des Arguments s, vielmehr die Bedeutung „Anzahl der Stellen nach dem Dezimalkomma“ hat. Das Verständnis wie Festkomma-Datentypen ihre Daten speichern und abrufen zeigt auch, warum dies so ist: beim Speichern wird die Zahl mit 10s multipliziert (10 hoch s) und als Integer gespeichert; beim Lesen wird der Integer wieder zurückkonvertiert.

Die Art und Weise wie Festkomma-Daten im DBMS abgelegt werden, hängt von diversen Faktoren ab: Genauigkeit, Datenbankdialekt, Deklartionstyp.

Tabelle 3.2. Verfahren zum Speichern von reellen Zahlen

Skalierung Datentyp Dialekt 1 Dialekt 3
1 - 4 NUMERIC SMALLINT SMALLINT
1 - 4 DECIMAL INTEGER INTEGER
5 - 9 NUMERIC ODER DECIMAL INTEGER INTEGER
10 - 18 NUMERIC ODER DECIMAL DOUBLE PRECISION BIGINT


NUMERIC

Datenformat für die Deklaration: 

       NUMERIC(p, s)
        

Beispiel der Speicherung: In Bezug auf das obige Beispiel, wird das DBMS NUMERIC-Daten in Abhängigkeit von der angegebenen Genauigkeit (p) und der Skalierung (s) speichern. Weitere Beispiele:

       NUMERIC(4) wird gespeichert als      SMALLINT (exakte Daten)
       NUMERIC(4,2)                         SMALLINT (Daten * 102)
       NUMERIC(10,4) (Dialekt 1)            DOUBLE PRECISION
                     (Dialekt 3)            BIGINT (Daten * 104)
        

Achtung

Beachten Sie, dass das Speicherformat von der Genauigkeit abhängt. So können Sie zum Beispiel die Spalte als NUMERIC(2,2) definieren, vorausgesetzt ihr Wertebereich liegt zwischen -0.99...0.99. Dennoch liegt der reale Wertebereich zwischen -327.68..327.67, wodurch deutlich wird, dass der NUMERIC(2,2)-Datentyp im SMALLINT-Format abgelegt wird. Gleiches gilt für NUMERIC(4,2) und NUMERIC(3,2). Das heißt, wenn Sie den Wertebereich auf -0.99...0.99 beschränken wollen, müssen Sie einen Constraint hierfür erstellen.

DECIMAL

Datenformat für die Deklaration: 

       DECIMAL(p, s)
        

Beispiel der Speicherung: Das Speicherformat in der Datenbank für DECIMAL-Felder ist ähnlich dem von NUMERIC, mit dem Unterschied, dass es leichter zu verstehen ist, mit ein paar Beispielen:

       DECIMAL(4) gespeichert als  INTEGER (exakte Daten)
       DECIMAL(4,2)                INTEGER (Daten * 102)
       DECIMAL(10,4) (Dialekt 1)   DOUBLE PRECISION
                     (Dialekt 3)   BIGINT (Daten * 104)
        
Zurück: Fließkomma-DatentypenFirebird Documentation IndexNach oben: Datentypen und UnterdatentypenWeiter: Datentypen für Datum und Zeit
Firebird Documentation IndexFirebird 2.5 SprachreferenzDatentypen und Unterdatentypen → Festkomma-Datentypen