SAP ABAP - 操作员


ABAP 提供了一组丰富的运算符来操作变量。所有 ABAP 运算符分为四类 -

  • 算术运算符
  • 比较运算符
  • 按位运算符
  • 字符串运算符

算术运算符

算术运算符在数学表达式中的使用方式与在代数中的使用方式相同。以下列表描述了算术运算符。假设整数变量 A 为 20,变量 B 为 40。

编号 算术运算符及说明
1

+(加法)

在运算符两侧添加值。示例:A + B 将得到 60。

2

−(减法)

从左手操作数中减去右手操作数。示例:A − B 将给出 -20。

3

*(乘法)

将运算符两侧的值相乘。示例:A * B 将得到 800。

4

/ (分配)

将左手操作数除以右手操作数。示例:B / A 将给出 2。

5

MOD(模数)

将左手操作数除以右手操作数并返回余数。示例:B MOD A 将给出 0。

例子

REPORT YS_SEP_08. 
DATA: A TYPE I VALUE 150, 
B TYPE I VALUE 50, 
Result TYPE I. 
Result =  A / B. 
WRITE / Result.

上面的代码产生以下输出 -

3

比较运算符

让我们讨论不同操作数的各种类型的比较运算符。

编号 比较运算符和描述
1

=(平等检验)。另一种形式是 EQ。

检查两个操作数的值是否相等,如果相等则条件为真。示例 (A = B) 不正确。

2

<>(不等式检验)。另一种形式是 NE。

检查两个操作数的值是否相等。如果值不相等,则条件成立。示例 (A <> B) 为真。

3

>(大于测试)。另一种形式是 GT。

检查左操作数的值是否大于右操作数的值。如果是,则条件成立。示例 (A > B) 不正确。

4

<(小于测试)。另一种形式是 LT。

检查左操作数的值是否小于右操作数的值。如果是,则条件成立。示例 (A < B) 为真。

5

>=(大于或等于)替代形式是 GE。

检查左操作数的值是否大于或等于右操作数的值。如果是,则条件成立。示例 (A >= B) 不正确。

6

<=(小于或等于测试)。另一种形式是 LE。

检查左操作数的值是否小于或等于右操作数的值。如果是,则条件成立。示例 (A <= B) 为真。

7

a1 a2 和 a3 之间(区间测试)

检查 a1 是否位于 a2 和 a3 之间(含)。如果是,则条件成立。示例(A BETWEEN B AND C)正确。

8

是初始的

如果变量的内容未更改并且已自动为其分配初始值,则条件为真。示例 (A IS INITIAL) 不正确

9

不是初始的

如果变量的内容已更改,则条件变为 true。示例(A 不是首字母)正确。

注意- 如果变量的数据类型或长度不匹配,则执行自动转换。在比较不同数据类型的两个值时,对其中一个或两个值执行自动类型调整。转换类型由数据类型和数据类型的优先顺序决定。

以下是优先顺序 -

  • 如果一个字段是类型 I,则另一个字段将转换为类型 I。

  • 如果一个字段的类型为 P,则另一字段将转换为 P 类型。

  • 如果一个字段是D类型,则另一个字段转换为D类型。但C和N类型不转换,直接比较。T型的情况也类似。

  • 如果一个字段的类型为 N,另一个字段的类型为 C 或 X,则这两个字段都将转换为 P 类型。

  • 如果一个字段的类型为 C,另一个字段的类型为 X,则 X 类型将转换为 C 类型。

实施例1

REPORT YS_SEP_08. 

DATA: A TYPE I VALUE 115,
      B TYPE I VALUE 119.
      IF A LT B.
      WRITE: / 'A is less than B'.
      ENDIF

上面的代码产生以下输出 -

A is less than B 

实施例2

REPORT YS_SEP_08. 

DATA: A TYPE I.
      IF A IS INITIAL.
      WRITE: / 'A is assigned'.
      ENDIF.

上面的代码产生以下输出 -

A is assigned.

按位运算符

ABAP还提供了一系列可用于构建布尔代数表达式的按位逻辑运算符。位运算符可以使用括号等组合在复杂的表达式中。

编号 位运算符及说明
1

位不

将十六进制数中的所有位翻转为相反值的一元运算符。例如,将此运算符应用于具有位级别值 10101010(例如“AA”)的十六进制数将得到 01010101。

2

位与

该二元运算符使用布尔 AND 运算符逐位比较每个字段。

3

位异或

使用布尔 XOR(异或)运算符逐位比较每个字段的二元运算符。

4

位或

使用布尔 OR 运算符逐位比较每个字段的二元运算符。

例如,下面的真值表显示了对字段 A 和字段 B 中包含的两位值应用布尔 AND、OR 或 XOR 运算符时生成的值。

场A B区 或者 异或
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

字符串运算符

以下是字符串运算符的列表 -

编号 字符串运算符及说明
1

CO(仅含有)

检查 A 是否仅由 B 中的字符组成。

2

CN(仅不包含)

检查 A 中是否包含 B 中不存在的字符。

3

CA(包含任何)

检查 A 是否至少包含 B 的一个字符。

4

不适用(不包含任何)

检查A是否不包含B的任何字符。

5

CS(包含字符串)

检查A中是否包含字符串B。

6

NS(不包含字符串)

检查A中是否不包含字符串B。

7

CP(包含模式)

它检查 A 是否包含 B 中的模式。

8

NP(不包含模式)

它检查 A 是否不包含 B 中的模式。

例子

REPORT YS_SEP_08. 
DATA: P(10) TYPE C VALUE 'APPLE',
      Q(10) TYPE C VALUE 'CHAIR'.
      IF P CA Q.
	
      WRITE: / 'P contains at least one character of Q'.
      ENDIF.

上面的代码产生以下输出 -

P contains at least one character of Q.