## Ausdruck (expression)

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

### Syntax

<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> ::= + | -

### Beispiele

SQL-Tutorial, Arithmetische Operationen

### Erläuterung

Die arithmetischen Operatoren können nur auf numerische Datentypen angewandt werden.

| Ergebnis eines Ausdrucks
expression | Wert eines beliebigen Datentyps
factor liefert einen NULL-Wert | NULL-Wert
factor liefert einen Spezial-NULL-Wert | 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.

#### Operanden sind Festkommazahlen

Operand1 (a) | Operand2 (b) | Ergebnis
Festkommazahl (p Genauigkeit s Anzahl der Nachkommastellen) | Festkommazahl (p' Genauigkeit s' Anzahl der Nachkommastellen) | Festkommazahl (p'' Genauigkeit s'' Anzahl der Nachkommastellen) oder Gleitkommazahl

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.

#### Operanden sind Festkommazahlen, Operatoren sind +, - , * oder /

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''=max(p-s,p'-s')+max(s,s')+1 s''=max(s,s')
(p+p')<=38 | * | Festkommazahl p''=p+p' s''=s+s'
(p-s+s')<=38 | / | Festkommazahl p''=38 s''=38-(p-s+s') Spezial-NULL-Wert, wenn b=0

#### Operanden sind ganze Zahlen, Operatoren sind DIV, MOD

Bedingung | Operator | Ergebnis
ABS(a)<1E38 und ABS(b)<1E38 und b<>0 | DIV | TRUNC(a/b)
b=0 | DIV | Spezial-NULL-Wert
ABS(a)>=1E38 und b<>0 oder ABS(b)>=1E38 | DIV | Fehlermeldung
ABS(a)<1E38 und ABS(b)<1E38 und b<>0 | MOD | a-b*(a DIV b)
b=0 | MOD | A
ABS(a)>=1E38 und b<>0 oder ABS(b)>=1E38 | MOD | Fehlermeldung

#### Ein Operand ist Gleitkommzahl

Wenn einer der Operanden eine Gleitkommazahl ist, so ist das Ergebnis der arithmetischen Operation eine Gleitkommazahl.