Vergleiche zwischen verschiedenen Datentypen 

Mit folgenden logischen Operatoren können zwei Datenobjekte mit verschiedenen Datentypen verglichen werden:

<operator>

Bedeutung

EQ

gleich

=

gleich

NE

ungleich

<>

ungleich

><

ungleich

LT

kleiner

<

kleiner

LE

kleiner gleich

<=

kleiner gleich

GT

größer

>

größer

GE

größer gleich

>=

größer gleich

Die Operanden müssen kompatibel oder ineinander konvertierbar sein.

Vergleich von elementaren Datentypen

Datenobjekte deren Datentyp einer der acht eingebauten ABAP-Typen ist, werden wie folgt verglichen:

Beim Vergleich kompatibler Operanden wird keine Konvertierung durchgeführt Der Vergleich läuft wie folgt ab: Numerische Felder (Typ I, F, P) und numerische Textfelder (Typ N) werden gemäß ihrem Zahlenwert verglichen. Bei den übrigen Feldern (C, D, T, X) findet der Vergleich von links nach rechts statt. Das erste verschiedene Zeichen von links entscheidet, welcher Operand größer ist. Textfelder (Typ C) werden bezüglich des zugrundeliegenden Zeichencodes verglichen. Bei Datumsfeldern (Typ D) ist die jüngere Datumsangabe größer als die ältere. Bei Zeitfeldern (Typ T) ist die spätere Zeitangabe größer als die frühere. Hexadezimalfelder (Typ X) werden bezüglich der Bytewerte verglichen.

Beim Vergleich inkompatibler Operanden, die zwar unterschiedliche Länge, aber gleichen Datentyp haben, läuft der Vergleich wie folgt ab: Gepackte Zahlen (Typ P) werden ohne Konvertierung gemäß ihrem Zahlenwert verglichen. Bei den übrigen Typen (C, N, X), die unterschiedliche Längen haben können, wird der kürzere Operand vor dem Vergleich auf die Länge des längeren Operands konvertiert und wie folgt aufgefüllt: Zeichenketten (Typ C) werden von rechts mit Leerzeichen aufgefüllt, numerische Texte (Typ N) von links mit Nullen, Hexadezimalfelder von rechts mit hexadezimal Null.

DATA: hex1(3) TYPE x VALUE '34B7A1',
      hex2(1) TYPE x VALUE 'F0'.

IF hex2 > hex1.
  ...
ENDIF.

Der logische Ausdruck in der IF-Anweisung ist wahr, da das erste Byte von HEX2 größer als das erste Byte von HEX1 ist.

Beim Vergleich inkompatibler Datenobjekte deren Datentyp unterschiedlich ist, wird vor der Ausführung des Vergleichs eine Typkonvertierung nach folgenden hierarchischen Regeln durchgeführt:

  1. Ist einer der Operanden eine Gleitpunktzahl (Typ F), konvertiert das System die anderen Operanden ebenfalls in Typ F.
  2. Ist einer der Operanden ein gepacktes Feld (Typ P), konvertiert das System die anderen Operanden ebenfalls in Typ P.
  3. Ist einer der Operanden ein Datumsfeld (Typ D) oder ein Zeitfeld (Typ T), konvertiert das System die anderen Operanden ebenfalls in den Typ D oder T. Vergleiche zwischen Datums- und Zeitfeldern werden nicht unterstützt und führen zum Programmabbruch.
  4. Ist einer der Operanden ein Characterfeld (Typ C) und der andere Operand ein Hexadezimalfeld (Typ X), konvertiert das System den Operanden vom Typ X in den Typ C.
  5. Ist einer der Operanden ein Characterfeld (Typ C) und der andere ein numerisches Feld (Typ N), konvertiert das System beide Operanden in den Typ P.

DATA: num(4)  TYPE n VALUE '1234',
      text(5) TYPE c VALUE '567.8'.

IF num > text.
  ...
ENDIF.

Der logische Ausdruck in der IF-Anweisung ist wahr, da nach der Konvertierung in gepackte Zahlen der Wert von NUM größer als der Wert von TEXT ist. Wenn NUM vom Typ C wäre, wäre der logische Ausdruck dagegen falsch, da dann nicht in gepackte Zahlen konvertiert wird.

Vergleich von Referenzen

Beim Vergleich kompatibler oder konvertibler Referenzvariablen in ABAP Objects sind nur die Operatoren für 'gleich' (EQ, =) und 'ungleich' (NE, <>, ><) sinnvoll. Der Vergleich mit 'gleich' ist wahr, wenn beide Referenzvariablen Referenzen auf das gleiche Objekt enthalten, und falsch, falls sie Referenzen auf unterschiedliche Objekte enthalten. Für 'ungleich' gilt das entsprechend umgekehrt.

INTERFACE i1.
  ...
ENDINTERFACE.

CLASS c1 DEFINITION.
  PUBLIC SECTION.
  INTERFACES i1.
  ...
ENDCLASS.

DATA: r1 TYPE REF TO i1,
      r2 TYPE REF TO c1.

CREATE OBJECT r2.

r1 = r2.

IF r1 = r2.
  ...
ENDIF.

Der logische Ausdruck in der IF-Anweisung ist wahr, da beide Referenzen auf das gleiche Objekt zeigen.

Vergleich von Strukturen

Kompatible Strukturen werden in ihre elementaren Bestandteile aufgelöst und diese werden verglichen. Zwei Strukturen sind gleich, wenn alle elementaren Bestandteile gleich sind. Bei ungleichen Strukturen entscheidet das erste ungleiche Element, welche Struktur größer oder kleiner ist.

DATA: BEGIN OF struct1,
        col1 TYPE i VALUE 1,
        col2 TYPE p DECIMALS 2 VALUE '56.78',
      END OF struct1.

DATA: BEGIN OF struct2,
        comp1 TYPE i VALUE 10,
        comp2 TYPE p DECIMALS 2 VALUE '12.34',
      END OF struct2.

IF struct1 < struct2.
  ...
ENDIF.

Der logische Ausdruck in der IF-Anweisung ist wahr, da der Wert der ersten Komponente von STRUCT1 kleiner als der Wert der zweiten Komponente ist.

Beim Vergleich inkompatibler Strukturen oder beim Vergleich zwischen Strukturen und elementaren Feldern, werden die beteiligten Strukturen vor dem Vergleich in Felder vom Typ C konvertiert und dann wie elementare Felder behandelt.

DATA: BEGIN OF struct,
        col1(5) TYPE c VALUE '12345',
        col2(5) TYPE n VALUE '12345',
      END OF struct.

DATA text(10) TYPE c VALUE '1234512345'.

IF struct = text.
  ...
ENDIF.

Der logische Ausdruck in der IF-Anweisung ist wahr, da die Struktur STRUCT nach der Konvertierung in ein Feld vom Typ C den gleichen Inhalt wie das Feld TEXT hat.

Vergleich von internen Tabellen

Siehe Interne Tabellen vergleichen.