%RANGE (下限: 上限)
%RANGE 与 IN 运算符一起使用。 %RANGE 不返回值,不能在除 IN 运算符之后的任何位置指定该值。
当 IN 运算符与 %RANGE 一起使用时,它确定第一个操作数是否在 %RANGE 指定的范围内。
如果 IN 运算符的第一个操作数大于或等于 %RANGE 的第一个操作数且小于或等于 %RANGE 的第二个操作数,那么使用带有 %RANGE 的 IN 运算符的表达式为 true。
IN 运算符的第一个操作数不能是数组。
%RANGE 的操作数必须能够相互比较并与 IN 运算符的第一个操作数进行比较。 例如,如果 IN 运算符的第一个操作数具有类型日期,那么 %RANGE 的操作数也必须具有类型日期。
以下两个语句等效:
IF x IN %RANGE(y1 : y2);
IF x >= y1 AND x <= y2;
如果 IN 运算符的第一个操作数具有类型字母数字,图形或 UCS-2,那么 %RANGE 的操作数还必须具有类型字母数字,图形或 UCS-2。 如果 IN 运算符的第一个操作数具有类型 date ,那么 %RANGE 的操作数也必须具有类型 date。 如果
警告: Unicode 或 ASCII 中的比较与 EBCDIC 中的比较不同。 请参阅 比较具有不同数据类型或 CCSID 的数据时的意外结果。
如果 IN %RANGE 的操作数是指针,那么除非所有指针都指向相关存储器,否则结果无意义。 在以下示例中, P1, P2 和 P3 都是指向变量 STRING的部分的指针。 将 IN 运算符与 %RANGE 一起用于这些指针是有意义的。
DCL-S string CHAR(1000);
DCL-S p1 POINTER;
DCL-S p2 POINTER;
DCL-S p3 POINTER;
p1 = %ADDR(string) + 10;
p2 = %ADDR(string) + 50;
p3 = %ADDR(string) + 75;
IF p2 IN %RANGE(p1 : p3);
DSPLY ('true');
ENDIF;