Ein Ausdruck hat einen Wert und einen Typ. Dabei bezeichnet der Typ die Grenzen,
innerhalb deren sich der Wert befinden muss. Die folgenden Regeln nutzen EGL-Primitive-Typen;
siehe Primitive-Datentypen.
Die folgenden Regeln bestimmen den Typ eines Ausdrucks. Diese Regeln
decken nicht die mögliche Konvertierung (Umstufung) einzelner Operanden ab - diese ist
plattformabhängig:
- Numerische Ausdrücke
- Diese Regeln gelten für Ausdrücke mit arithmetischen Operatoren.
Die Regeln definieren den erwarteten Typ des Ausdrucks, abhängig von
Genauigkeit oder Länge. Sie geben nicht an, wie die Operanden konvertiert werden,
da dieser Prozess bei den einzelnen Zielsprachen verschieden ist. Die folgenden Binäroperatoren können die Umstufung eines oder mehrerer Operanden erforderlich machen:
- Arithmetische Operatoren +, -, *, /, %, **
- Numerische Vergleichsoperatoren ==, !=, <, >, <=, >=
- Bitoperatoren &, |, ^
- Die folgenden Regeln gelten in der angegebenen Reihenfolge für die arithmetischen und
numerischen Vergleichsoperatoren:
- Wenn ein Operand den Typ 'Text' hat, hat der Ausdruck den Typ NUMBER.
- Andernfalls: Wenn ein Operand den Typ FLOAT hat, hat der Ausdruck den Typ FLOAT.
- Andernfalls: Wenn ein Operand den Typ SMALLFLOAT hat, hat der Ausdruck den Typ SMALLFLOAT.
- Andernfalls: Wenn ein Operand den Typ NUM hat, hat der Ausdruck den Typ NUM.
- Andernfalls: Wenn ein Operand den Typ NUMC hat, hat der Ausdruck den Typ NUMC.
- Andernfalls: Wenn ein Operand den Typ DECIMAL hat, hat der Ausdruck den Typ DECIMAL.
- Andernfalls: Wenn ein Operand den Typ BIN hat, hat der Ausdruck den Typ BIN.
- Andernfalls: Wenn ein Operand den Typ BIGINT hat, hat der Ausdruck den Typ BIGINT.
- Andernfalls: Wenn ein Operand den Typ INT hat, hat der Ausdruck den Typ INT.
- Andernfalls: Wenn ein Operand den Typ SMALLINT hat, hat der Ausdruck den Typ SMALLINT.
Jeder der Bitoperatoren and (&), or (|) und
exclusive or (^) führt eine bitweise Operation für zwei Operanden
durch und gibt einen Wert des Typs INT zurück. Beide Operanden können den Typ
HEX(2), HEX(4), HEX(8), INT oder SMALLINT haben. Die Operation beginnt mit der Konvertierung
eines beliebigen HEX- und SMALLINT-Operanden in den Typ INT. Bei HEX-Operanden füllt die Operation
den Wert des Operanden auf der linken Seite mit Nullen auf, bis eine Länge von vier Bytes erreicht ist.
- Textausdrücke
- Diese Regeln gelten für Operanden von binären Operationen, für die Texttypwerte
benötigt werden. Es wird hier davon ausgegangen, dass keiner der Operanden einen
numerischen Typ, da ansonsten die Regeln für numerische Ausdrücke gelten. Die folgenden Textvergleichsoperatoren
können die Umstufung eines oder mehrerer Operanden erforderlich machen: ==, !=, <, >, <=, >=.
- Es gelten die folgenden Regeln in der angegebenen Reihenfolge:
- Wenn ein Operand den Typ STRING hat, wird der andere in STRING konvertiert.
- Andernfalls: Wenn ein Operand den Typ STRING(i) hat, wird der zweite in
STRING(j) konvertiert, wobei 'j' der längere Wert von dem zweiten Operanden und 'i' ist.
- Andernfalls: Wenn ein Operand den Typ UNICODE(i) hat, wird der zweite in
UNICODE(j) konvertiert, wobei 'j' der längere Wert von dem zweiten Operanden und 'i' ist.
- Andernfalls: Wenn ein Operand den Typ MBCHAR(i) hat, wird der zweite in
MBCHAR(j) konvertiert, wobei 'j' der längere Wert von dem zweiten Operanden und 'i' ist.
- Andernfalls: Wenn ein Operand den Typ CHAR(i) hat, wird der zweite in
CHAR(j) konvertiert, wobei 'j' der längere Wert von dem zweiten Operanden und 'i' ist.