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: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.