Ein Ausdruck (expression) spezifiziert einen Wert, der gegebenenfalls durch Anwendung von arithmetischen Operatoren auf Werte erzeugt wird. Oftmals wird in einer SQL-Anweisung auch eine Liste von Ausdrücken (expression_list) verwendet.
Es werden folgende arithmetische Operatoren unterschieden:
●
Additive Operatoren
+ Addition
- Subtraktion
●
Multiplikative Operatoren
* Multiplikation
/ Division
DIV ganzzahlige Division
MOD Rest nach ganzzahliger Division
<expression> ::=
<term>
|
<expression> + <term>
|
<expression> - <term>
<expression_list> ::= (<expression>,...)
<term> ::=
<factor>
|
<term> * <factor>
|
<term> / <factor>
|
<term> DIV <factor>
|
<term> MOD <factor>
<factor> ::=
[<sign>] <value_spec>
| [<sign>]
<column_spec>
| [<sign>]
<function_spec>
| [<sign>]
<set_function_spec>
| <scalar_subquery>
|
<expression>
<sign> ::= + | -
SQL-Tutorial, Arithmetische
Operationen
Die arithmetischen Operatoren können nur auf numerische Datentypen angewandt werden.
|
Ergebnis eines Ausdrucks |
expression |
Wert eines beliebigen Datentyps |
factor liefert einen NULL-Wert |
|
factor liefert einen Spezial-NULL-Wert |
|
expression führt zu einer Division durch 0 |
Spezial-NULL-Wert |
expression führt zu einem Überlauf des internen Zwischenergebnisses |
Spezial-NULL-Wert |
Bei fehlender Klammerung haben die Operatoren folgende Priorität:
...
1. Das Vorzeichen (+ | -) bindet stärker als die additiven und multiplikativen Operatoren.
2. Die multiplikativen Operatoren binden stärker als die additiven Operatoren.
3. Die multiplikativen Operatoren haben untereinander gleiche Priorität.
4. Die additiven Operatoren haben untereinander gleiche Priorität.
5. Bei gleicher Priorität erfolgt die Auswertung von links nach rechts.
Operand1 (a) |
Operand2 (b) |
Ergebnis |
Festkommazahl |
Festkommazahl |
Festkommazahl |
Der Datentyp des Ergebnisses ist abhängig von der Operation sowie von der Genauigkeit und der Anzahl der Nachkommastellen der Operanden.
Beachten Sie, dass bei der Angabe eines Spaltennamens der Datentyp der Spalte zugrunde gelegt wird, nicht die Genauigkeit und die Anzahl der Nachkommastellen des aktuellen Wertes der Spalte.
Das Ergebnis von Addition, Subtraktion und Multiplikation wird aus einem Zwischenergebnis erzeugt, das mehr als 38 gültige Ziffern haben kann. Wenn das Zwischenergebnis nicht mehr als 38 gültige Ziffern hat, ist das endgültige Ergebnis gleich diesem Zwischenergebnis. Andernfalls wird ein Ergebnis als Gleitkommazahl mit 38 Stellen Genauigkeit erzeugt. Nachkommastellen werden gegebenenfalls abgeschnitten.
Bedingung |
Operator |
Ergebnis |
max(p-s,p'-s') |
+, - |
Festkommazahl |
(p+p')<=38 |
* |
Festkommazahl |
(p-s+s')<=38 |
/ |
Festkommazahl |
Bedingung |
Operator |
Ergebnis |
ABS(a)<1E38
und |
DIV |
TRUNC(a/b) |
b=0 |
DIV |
Spezial-NULL-Wert |
ABS(a)>=1E38 und |
DIV |
Fehlermeldung |
ABS(a)<1E38 und |
MOD |
a-b*(a DIV b) |
b=0 |
MOD |
A |
ABS(a)>=1E38 und |
MOD |
Fehlermeldung |
Wenn einer der Operanden eine Gleitkommazahl ist, so ist das Ergebnis der arithmetischen Operation eine Gleitkommazahl.