逻辑表达式的结果为 true 或 false,并且在 if 或 while 语句或(在某些情况下)case 语句中用作条件。
基本逻辑表达式由操作数、比较运算符和第二个操作数组成,如以下语法图及后续表所示:
第一个操作数 | 比较运算符 | 第二个操作数 |
---|---|---|
日期时间表达式 | 下列其中一项: ==, != , <, >, <=, >= | 日期时间表达式 第一个和第二个表达式必须是兼容类型。 如果是日期时间比较,则大于号(>)表示以后的时间,小于号(<)表示以前的时间。 |
数字表达式 | 下列其中一项: ==, != , <, >, <=, >= | 数字表达式 |
字符串表达式 | 下列其中一项: ==, != , <, >, <=, >= | 字符串表达式 |
字符串表达式 | like | likeCriterion,这是将对其比较字符串表达式的字符字段或文字,比较方式是从左至右比较逐个字符位置。此功能的用法类似于 SQL
查询中的关键字 like 的用法。 escChar 是解析为转义字符的单字符字段或文字。 有关更多详细信息,请参阅 like 运算符。 |
字符串表达式 | 匹配 | matchCriterion,这是将对其比较字符串表达式的字符字段或文字,比较方式是从左至右比较逐个字符位置。此功能的用法类似于
UNIX® 或 Perl
中的正则表达式的用法。 escChar 是解析为转义字符的单字符字段或文字。 有关更多详细信息,请参阅 matches 运算符。 |
Value of type NUM or CHAR,如对第二个操作数所述 | 下列其中一项: ==, != , <, >, <=, >= | Value of type NUM or CHAR,它可以是下列任何一项:
|
searchValue | in | arrayName;有关详细信息,请参阅 in。 |
field not in SQL record | 下列其中一项:
|
下列其中一项:
|
field in an SQL record | 下列其中一项:
|
下列其中一项:
仅当数据库列的长度超过该字段的长度时,trunc 测试结果才是 true。在将值移动到字段之后或在将字段设置为 NULL 后,测试结果值为 false。 |
textField(文本表单中的字段的名称) | 下列其中一项:
|
下列其中一项:
|
ConverseVar.eventKey | 下列其中一项:
|
有关详细信息,请参阅 ConverseVar.eventKey。 |
sysVar.systemType | 下列其中一项:
|
有关详细信息,请参阅 sysVar.systemType。
不能使用 is 或 not 来测试 VGLib.getVAGSysType 返回的值。 |
record name | 下列其中一项:
|
适用于记录组织的 I/O 错误值。请参阅 I/O 错误值。 |
下表列示比较运算符,其中每个运算符在表达式中使用时将解析为 true 或 false。
运算符 | 用途 |
---|---|
== | 等于运算符指示两个操作数的值是否相等。 |
!= | 不等于运算符指示两个操作数是否具有不同的值。 |
< | 小于运算符指示第一个操作数在数字上是否小于第二个操作数。 |
> | 大于运算符指示第一个操作数在数字上是否大于第二个操作数。 |
<= | 小于等于运算符指示第一个操作数在数字上是否小于等于第二个操作数。 |
>= | 大于等于运算符指示第一个操作数在数字上是否大于等于第二个操作数。 |
in | in 运算符指示两个操作数中的第一个操作数是否是第二个操作数(它引用数组)中的值。有关详细信息,请参阅 in。 |
is | is 运算符指示两个操作数中的第一个操作数是否在第二个操作数的类别中。有关详细信息,请参阅上表。 |
like | like 运算符指示两个操作数中的第一个操作数中的字符是否与第二个操作数中的字符相匹配,如 like 运算符中所述。 |
匹配 | matches 运算符指示两个操作数中的第一个操作数中的字符是否与第二个操作数中的字符相匹配,如 matches 运算符中所述。 |
not | not 运算符指示两个操作数中的第一个操作数是否不在第二个操作数的类别中。有关详细信息,请参阅上表。 |
下表及随后的解释说明操作数具有指定类型时的兼容性规则。
第一个操作数的基本类型 | 第二个操作数的基本类型 |
---|---|
BIN | BIN, DECIMAL, FLOAT, MONEY, NUM, NUMC, PACF, SMALLFLOAT |
CHAR | CHAR, DATE, HEX, MBCHAR, NUM, TIME, TIMESTAMP |
DATE | CHAR, DATE, NUM, TIMESTAMP |
DBCHAR | DBCHAR |
DECIMAL | BIN, DECIMAL, FLOAT, MONEY, NUM, NUMC, PACF, SMALLFLOAT |
HEX | CHAR 和 HEX |
MBCHAR | CHAR 和 MBCHAR |
MONEY | BIN, DECIMAL, FLOAT, MONEY, NUM, NUMC, PACF, SMALLFLOAT |
NUM | BIN, CHAR, DATE, DECIMAL, FLOAT, MONEY, NUM, NUMC, PACF, SMALLFLOAT, TIME |
NUMC | BIN, DECIMAL, FLOAT, MONEY, NUM, NUMC, PACF, SMALLFLOAT |
PACF | BIN, DECIMAL, FLOAT, MONEY, NUM, NUMC, PACF, SMALLFLOAT |
TIME | CHAR, NUM, TIME, TIMESTAMP |
TIMESTAMP | CHAR, DATE, TIME, TIMESTAMP |
UNICODE | UNICODE |
通过使用 and(&&)或 or 运算符(||)组合一对较基本的表达式,可以构建更复杂的表达式。此外,也可以使用 not 运算符(!),如稍后所描述的那样。
field01 == field02 || 3 in array03 || x == y
如果 field01 不等于 field02,则求值将继续。但是,如果 array03 包含值 3,则整个表达式求值为 true,并且不会对最后一个基本逻辑表达式(x == y)求值。
同样,如果用 and 运算符将基本逻辑表达式组合起来,则如果其中一个基本逻辑表达式解析为 false,EGL 将停止求值。在以下示例中,只要发现 field01 不等于 field02,求值就会停止:
field01 == field02 && 3 in array03 && x == y
在查看下面的示例时,假定 value1 包含“1”,value2 包含“2”,依此类推:
/* == true */ value5 < value2 + value4 /* == false */ !(value1 is numeric) /* == true when the generated output runs on Windows 2000, Windows NT, or z/OS UNIX System Services */ sysVar.systemType is WIN || sysVar.systemType is USS /* == true */ (value6 < 5 || value2 + 3 >= value5) && value2 == 2
相关概念
已修正数据标记和 modified 属性
相关任务
语法图