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。

实例
  1. REPORT YS_SEP_08.
  2. DATA: A TYPE I VALUE 150,
  3. B TYPE I VALUE 50,
  4. Result TYPE I.
  5. Result = A / B.
  6. WRITE / Result.

结果如下:

  1. 3

比较运算符

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

编号比较运算符 & 描述
1

= (equality test)。 替代形式是 EQ。

检查两个操作数的值是否相等,如果相等,则条件变为 true。 实例 (A = B) is not true。

2

<> (Inequality test)。 替代形式是 NE。

检查两个操作数的值是否相等如果值不相等,则条件变为 true。 实例 (A <> B) is true。

3

> (Greater than test)。替代形式是 GT。

检查左操作数的值是否大于右操作数的值如果是,则条件变为 true。 实例 (A > B) is not true。

4

< (Less than test)。 替代形式是 LT。

检查左操作数的值是否小于右操作数的值如果是,则条件变为 true。 实例 (A < B) is true。

5

>= (Greater than or equals) 。替代形式是 GE。

检查左操作数的值是否大于或等于右操作数的值如果是,则条件变为 true。 实例 (A >= B) is not true。

6

<= (Less than or equals test)。 替代形式是 LE。

检查左操作数的值是否小于或等于右操作数的值如果是,则条件变为 true。 实例 (A <= B) is true。

7

a1 BETWEEN a2 AND a3 (Interval test)

检查 a1 是否位于 a2 和 a3 之间(包括 a2 和 a3)如果是,则条件变为 true。 实例 (A BETWEEN B AND C) is true。

8

IS INITIAL

如果变量的内容没有更改并且已自动为其分配初始值,则条件变为 true。 实例 (A IS INITIAL) is not true

9

IS NOT INITIAL

如果变量的内容已更改,则条件变为 true。 实例 (A IS NOT INITIAL) is true。

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

以下是优先顺序:

  • 如果一个字段的类型为 I,则另一个字段将转换为 I 类型。
  • 如果一个字段的类型为 P,则另一个字段将转换为 P 类型。
  • 如果一个字段的类型为 D,则另一个字段将转换为 D 类型。但 C N 类型不会转换,而是直接进行比较。T 型的情况类似。
  • 如果一个字段的类型为 N,另一个字段的类型为 CX,则这两个字段都将转换为 P 类型。
  • 如果一个字段的类型为 C,另一个字段的类型为 X,则 X 类型将转换为 C 类型。
实例 1
  1. REPORT YS_SEP_08.
  2. DATA: A TYPE I VALUE 115,
  3. B TYPE I VALUE 119.
  4. IF A LT B.
  5. WRITE: / 'A is less than B'.
  6. ENDIF

结果如下:

  1. A is less than B
实例 2
  1. REPORT YS_SEP_08.
  2. DATA: A TYPE I.
  3. IF A IS INITIAL.
  4. WRITE: / 'A is assigned'.
  5. ENDIF.

结果如下:

  1. A is assigned.

位运算符

ABAP 还提供了一系列可用于构建布尔代数表达式的位逻辑运算符。

可以使用括号等在复杂表达式中组合位运算符。

编号位运算符 & 描述
1

BIT-NOT

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

2

BIT-AND

此二进制运算符使用布尔 AND 运算符逐位比较每个字段。

3

BIT-XOR

使用布尔 XOROR)运算符逐位比较每个字段的二进制运算符。

4

BIT-OR

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

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

字段 A字段 BANDORXOR
00000
01011
10011
11110

字符串运算符

以下是字符串运算符列表:

编号字符串运算符 & 描述
1

CO (Contains Only)

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

2

CN (Not Contains ONLY)

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

3

CA (Contains ANY)

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

4

NA (NOT Contains Any)

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

5

CS (Contains a String)

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

6

NS (NOT Contains a String)

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

7

CP (Contains a Pattern)

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

8

NP (NOT Contains a Pattern)

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

实例
  1. REPORT YS_SEP_08.
  2. DATA: P(10) TYPE C VALUE 'APPLE',
  3. Q(10) TYPE C VALUE 'CHAIR'.
  4. IF P CA Q.
  5. WRITE: / 'P contains at least one character of Q'.
  6. ENDIF.

结果如下:

  1. P contains at least one character of Q.