NUMERIC und DECIMAL

<< NULL | IBExpert Glossar | Page Size (Seitengröße) >>

NUMERIC und DECIMAL

Der Datentyp NUMERIC definiert eine numerische Spalte, in der der Wert ein festes Dezimalkomma hat, wie bei Währungsdaten. NUMERIC(18) ist ein 64-Bit Integer-Wert in SQL Dialekt 3 und ist fast unendlich. Seit der Einführung des SQL Dialekt 3 werden numerische und dezimale Datentypen als INTEGERS mit enstprechender Größe gespeichert.

SQL Dialekt 1 bietet NUMERIC(15).

Syntax:

 NUMERIC(precision, scale);

oder

 DECIMAL(precision, scale);

PRECISION bezieht sich auf die Gesamtzahl an Ziffern und SCALE beieht sich auf die Anzahl der Zeichen rechts vom Deziamlkomma. Beide Zahlen können von 1 bis 18 (SQL dialect 1: 1-15) gehen, aber SCALE muss weniger oder gleich PRECISION sein.

Es ist besser einen NUMERIC_wert immer auf seine maximale Länge zu definiern, wie in diesem Fall, der 32 Bit INTEGER-Wert verwendet wird. Sonst wird ein 16 Bit-Wert intern verwendet, beispielsweise wie NUMERIC(4,2) und der wird nicht immer korrekt von der Client-Programmumgebung zurück transformiert (eine ältere BDE-Version könnte zum Beispiel mit einem NUMERIC(4,2) aus Euro 12,40 1,240 machen).

Firebird/InterBase® unterstützt eine Vielzahl an Optionen, um PRECISION und SCALE festzulegen oder nicht:

  1. Wenn weder PRECISION noch SCALE festgelegt wurden, definiert Firebird/InterBase® die Spalten als INTEGER statt NUMERIC und speichert nur den Integer-Teil des Wertes.
  2. Wenn nur PRECISION festgelegt wurde und Sie verwenden den SQL Dialekt 1, konvertiert Firebird/InterBase® die Spalten in einen SMALLINT, INTEGER oder DOUBLE PRECISION Datentyp basierend auf der entsprechenden Zahl der maßgeblichen Ziffern, die gespeichert werden.

Wenn im SQL Dialekt 3 nur PRECISION fetsgelegt wurde, konvertiert Firebird/InterBase® die Spalten in einen SMALLINT, INTEGER oder INT64 Datentyp, basierend auf der entsprechenden Zahl der maßgeblichen Ziffer, die gespeichert werden.

Es gibt einen wichtigen Unterschied zwischen den zwei Dialekten, denn da INT64 ein INTEGER-Datentyp ist und DOUBLE PRECISION nicht, werden Sie gelegentlich Rundungsfehler im SQL Dialket 1 haben, jedoch nicht im SQL Dialekt 3 oder später.

Der NUMERIC-Datentyp sollte nur für Felder verwendet werden, die später als Teil einer Kalkulation verwendet werden.

Firebird/InterBase® konvertiert die Spalten wie folgt:

Definitionerzeugter Datentyp
Decimal(1)-Decimal(4)Small Integer
Decimal(5)-Decimal(9)Integer
Decimal(10)-Decimal(18)Int (64)

Baechten Sie bitte, dass wenn einDECIMAL(5)-Datentyp fetstgelegt wurde, es tatsächlich möglich ist, einen Wert bis zu der Höhe Höhe eines DECIMAL(9)-Wertes zu speichern, da Firebird/InterBase® den kleinsten verfügbaren Datentyp verwendet, um den Wert zu speichern. Für eine DECIMAL(5)-Spalte ist das ein INTEGER, der einen Wert in Höhe eines DECIMAL(9)-Wertes speichern kann.

NUMERIC-SORT

Firebird 2.5 führte NUMERIC-SORT für Unicode-Sortierungen ein.

Format und Verwendung

 NUMERIC-SORT={0 | 1}

Der Defaultwert, 0, sortiert numerische Werte in alphabetischer Reihenfolge. Zum Beispiel:

 1
 10
 100
 2
 20

1 sortiert numerische Werte in numerischer Reihenfolge. Zum Beispiel:

 1
 2
 10
 20
 100

Beispiel

 create collation unicode_num for utf8
 from unicode 'NUMERIC-SORT=1';

zurück zum Seitenanfang

Siehe auch:
deutschsprachig:
Tabelleneditor
SQL Editor
englischsprachig:
Data types and subtypes
Selecting the right data type to improve database performance
Firebird 2.1 Language Reference Update
Firebird 2.0 Language Reference Update
SQL Language Reference

zurück zum Seitenanfang
<< NULL | IBExpert Glossar | Page Size (Seitengröße) >>