DATA: lv_age_range TYPE RANGE OF i. lv_age_range = '10' TO '20'. " 设置RANGE的上下边界 SELECT * FROM customers WHERE age IN lv_age_range.
RANGE的值为单个值时的使用方式
当一个 RANGE 参数只包含单个值时,可以将该值同时放在 LOW 和 HIGH 字段中,因为 LOW 和 HIGH 字段通常用于表示一个范围的下限和上限,而单个值可以被认为是一个没有范围的点。
示例代码:
1 2 3 4 5 6 7 8 9 10 11 12
DATA: lv_range TYPE RANGE OF i. lv_range-sign = 'I'. " 设置为包含的值 lv_range-option = 'EQ'. " 设置操作符为等于 lv_range-low = 10. " 存储单个值 lv_range-high = lv_range-low. " 同样存储单个值 IF lv_range IS SINGLE VALUE. WRITE: 'RANGE 参数只包含单个值:', lv_range-low. ELSE. WRITE: 'RANGE 参数包含多个值或范围'. ENDIF.
这里把 10 同时赋给 LOW 和 HIGH,再用 IS SINGLE VALUE 判断是否只含单个值。
RANGE TABLE 的使用方式
使用RANGE TABLE的基本步骤如下:
1
DATA: lt_range_table TYPE RANGE OF string.
1 2
APPEND 'Value1' TO lt_range_table. APPEND 'Value2' TO lt_range_table.
1 2
SELECT * FROM table_name WHERE field_name IN lt_range_table.
RANGE与OPEN SQL结合的使用方式
示例:
1 2 3 4 5 6 7 8 9 10 11
DATA: lt_table TYPE TABLE OF your_table_type. DATA: lv_range TYPE RANGE OF your_field_type. lv_range-sign = 'I'. lv_range-option = 'BT'. lv_range-low = 'A'. lv_range-high = 'G'. SELECT * FROM your_table INTO TABLE lt_table WHERE your_field IN lv_range.
代码里先构造了一个 BT(between)范围 A~G,然后在 WHERE 里用 IN 直接过滤。
对RANGE变量自身的操作
对RANGE的检查操作
IS INITIAL:用于检查 RANGE 参数是否为空或未被设置。例如:
1 2 3 4 5
IF lv_range IS INITIAL. " RANGE 参数为空 ELSE. " RANGE 参数已设置 ENDIF.
IS SINGLE VALUE:用于检查 RANGE 参数是否只包含单个值。例如:
1 2 3 4 5
IF lv_range IS SINGLE VALUE. " RANGE 参数只包含单个值 ELSE. " RANGE 参数包含多个值或范围 ENDIF.
NUMBER OF INTERVALS:用于获取 RANGE 参数中包含的区间数。例如:
1 2 3
DATA: lv_interval_num TYPE i. lv_interval_num = lv_range-NUMBER OF INTERVALS.
遍历RANGE 中 的值
使用FOR
可以使用 FOR 子句来迭代处理一个 RANGE 参数的值。FOR 子句可以与 RANGE OF 一起使用,以便逐一访问范围内的值。
示例代码
1 2 3 4 5 6 7 8 9 10 11 12
DATA: lv_range TYPE RANGE OF i. DATA: lv_value TYPE i. lv_range-sign = 'I'. " 设置为包含的值 lv_range-option = 'BT'. " 设置操作符为介于 lv_range-low = 10. " 设置范围下限 lv_range-high = 20. " 设置范围上限 " 使用 FOR 子句迭代处理 RANGE 参数的值 FOR lv_value IN lv_range WRITE: / '当前值:', lv_value. ENDFOR.
REPORT ZABAP_RANGE. DATA: lt_numbers TYPE TABLE OF i, ls_range TYPE RANGE OF i. lt_numbers = VALUE #( ( 5 ) ( 15 ) ( 25 ) ( 35 ) ( 45 ) ). ls_range = VALUE #( FOR wa IN lt_numbers ( sign = 'I' option = 'EQ' low = wa ) ). LOOP AT ls_range INTO DATA(wa1). write: / wa1-low. ENDLOOP.
输出结果
1 2 3 4 5
5 15 25 35 45
内表转换为RANGE
1 2 3 4 5 6
DATA: lt_numbers TYPE TABLE OF i, ls_range TYPE RANGE OF i. lt_numbers = VALUE #( ( 5 ) ( 15 ) ( 25 ) ( 35 ) ( 45 ) ). ls_range = VALUE #( FOR wa IN lt_numbers ( sign = 'I' option = 'EQ' low = wa ) ).