Ausdruckstypen

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.

Feedback