In diesem Abschnitt werden die verfügbaren impliziten CAST-Umsetzungen für
Rechenoperationen aufgelistet.
Normalerweise werden die arithmetischen Operatoren (+, -, *
und /) für Operanden desselben Datentyps angewendet und geben einen Wert mit demselben Datentyp wie
die Operanden zurück. Fälle, in denen Operanden einen anderen Datentyp haben dürfen oder sich der
Datentyp des Ergebniswertes vom Typ des Operanden unterscheidet, werden in der folgenden Tabelle
gezeigt.
In der folgenden Tabelle werden die impliziten CAST-Umsetzungen für
Rechenoperationen aufgelistet.
Datentyp linker Operand |
Datentyp rechter Operand |
Unterstützte Operatoren |
Datentyp des Ergebnisses |
INTEGER |
FLOAT |
+, -, *, / |
FLOAT1 |
INTEGER |
DECIMAL |
+, -, *, / |
DECIMAL1 |
INTEGER |
INTERVAL |
* |
INTERVAL4 |
FLOAT |
INTEGER |
+, -, *, / |
FLOAT1 |
FLOAT |
DECIMAL |
+, -, *, / |
FLOAT1 |
FLOAT |
INTERVAL |
* |
INTERVAL4 |
DECIMAL |
INTEGER |
+, -, *, / |
DECIMAL1 |
DECIMAL |
FLOAT |
+, -, *, / |
FLOAT1 |
DECIMAL |
INTERVAL |
* |
INTERVAL4 |
TIME |
TIME |
- |
INTERVAL2 |
TIME |
GMTTIME |
- |
INTERVAL2 |
TIME |
INTERVAL |
+, - |
TIME3 |
GMTTIME |
TIME |
- |
INTERVAL2 |
GMTTIME |
GMTTIME |
- |
INTERVAL2 |
GMTTIME |
INTERVAL |
+, - |
GMTTIME3 |
DATE |
DATE |
- |
INTERVAL2 |
DATE |
INTERVAL |
+, - |
DATE3 |
TIMESTAMP |
TIMESTAMP |
- |
INTERVAL2 |
TIMESTAMP |
GMTTIMESTAMP |
- |
INTERVAL2 |
TIMESTAMP |
INTERVAL |
+, - |
TIMESTAMP3 |
GMTTIMESTAMP |
TIMESTAMP |
- |
INTERVAL2 |
GMTTIMESTAMP |
GMTTIMESTAMP |
- |
INTERVAL2 |
GMTTIMESTAMP |
INTERVAL |
+, - |
GMTTIMESTAMP3 |
INTERVAL |
INTEGER |
*, / |
INTERVAL4 |
INTERVAL |
FLOAT |
*, / |
INTERVAL4 |
INTERVAL |
DECIMAL |
*, / |
INTERVAL4 |
INTERVAL |
TIME |
+ |
TIME3 |
INTERVAL |
GMTTIME |
+ |
GMTTIME3 |
INTERVAL |
DATE |
+ |
DATE3 |
INTERVAL |
TIMESTAMP |
+ |
TIMESTAMP3 |
INTERVAL |
GMTTIMESTAMP |
+ |
GMTTIMESTAMP3 |
Anmerkungen:
- Der Operand, der nicht mit dem Datentyp des Ergebnisses übereinstimmt, wird vor Beginn der
Operation in den Datentyp des Ergebnisses umgesetzt.
Wenn beispielsweise der linke Operand bei
einem Operator für eine Addition den Datentyp INTEGER hat und der rechte Operand den Typ FLOAT,
wird der linke Operand vor Ausführung der Addition in einen FLOAT-Typ umgesetzt.
- Das Ergebnis der Subtraktion eines (GMT)TIME-Wertes von einem (GMT)TIME-Wert, eines DATE-Wertes
von einem DATE-Wert oder eines (GMT)TIMESTAMP-Wertes von einem (GMT)TIMESTAMP-Wert ist ein
INTERVAL-Wert, der das Zeitintervall zwischen den beiden Operanden angibt.
- Das Ergebnis einer Addition oder Subtraktion eines INTERVAL-Wertes von einem (GMT)TIME-, DATE-
oder (GMT)TIMESTAMP-Wert ist ein neuer Wert mit dem Datentyp des Nicht-INTERVAL-Operanden und gibt
den Zeitpunkt an, der sich aus dem ursprünglichen Nicht-INTERVAL-Wert plus bzw. minus dem Zeitraum,
der als INTERVAL-Wert angegeben ist, ergibt.
- Das Ergebnis einer Multiplikation oder Division eines INTERVAL-Wertes mit einem bzw. durch
einen INTEGER-, FLOAT- oder DECIMAL-Wert ist ein neuer INTERVAL-Wert, der den Zeitraum angibt, der
sich aus dem ursprünglichen Wert multipliziert mit oder dividiert durch den im
Nicht-INTERVAL-Operanden angegebenen Wert ergibt. Beispielsweise ergibt ein INTERVAL-Wert von 2
Stunden 16 Minuten multipliziert mit einem FLOAT-Wert von 2,5 den neuen INTERVAL-Wert 5 Stunden 40
Minuten. Die Zwischenrechnungen im Rahmen der Multiplikation oder Division des ursprünglichen
INTERVAL-Wertes werden in dem Datentyp des Nicht-INTERVAL-Wertes ausgeführt, die einzelnen Felder
des INTERVAL-Wertes (z. B. HOUR, YEAR usw.) sind jedoch immer eine ganze Zahl, d. h., es können
Rundungsfehler auftreten.
|