本主题描述了 ESQL 的复杂比较运算符(谓词)。有关 ESQL 的简单比较运算符的信息,请参阅 ESQL 简单比较运算符。
此运算符有两种格式:SYMMETRIC 和 ASYMMETRIC(如果未指定任何格式,则使用它们作为缺省值)。SYMMETRIC 格式相当于:
(source >= boundary1 AND source <= boundary2) OR (source >= boundary2 AND source <= boundary1)
ASYMMETRIC 格式相当于:
source >= boundary1 AND source <= boundary2
ASYMMETRIC 格式比较简单,但是仅当第一个边界值小于第二个边界值时才返回您期望的结果。仅当边界条件表达式是文字表达式时,它才有用。
如果操作数的类型不同,则应用特殊规则。隐式类型强制转换中有关于这些规则的描述。
EXISTS(SELECT * FROM something WHERE predicate)
如果左操作数不为 NULL,并且等于右操作数中的一个,结果为 TRUE。如果左、右操作数均不为 NULL,并且左操作数不等于右操作数中的任何一个,则结果为 FALSE。否则,结果为 UNKNOWN。如果操作数的类型不同,则应用特殊规则。隐式类型强制转换中有关于这些规则的描述。
运算符 IS 的主要用途是测试一个值是否为 NULL。比较运算符(=)不允许这样,因为将任何值与 NULL 比较结果都是 NULL。
IS 还用于测试布尔值 TRUE 和 FALSE,以及特殊值的十进制值。这些特殊值用 INF、+INF、-INF、NAN(不是数字)和 NUM(有效数字)的任何大小写组合表示。另外还接受其他格式如 +INFINITY、-INFINITY 和 NUMBER。
如果应用于非数字类型,则结果为 FALSE。
如果任何操作数均不为 NULL 并且 source 操作数与 pattern 操作数匹配,则结果为 TRUE。如果任何操作数均不为 NULL 并且 source 操作数与 operand 操作数不匹配,则结果为 FALSE。否则,结果为 UNKNOWN。
pattern 用字符串指定,其中可以使用具有特殊含义的百分号(%)和下划线(_)字符:
Body.Trade.Company LIKE 'I__'
Body.Trade.Company LIKE 'I%'
要在被匹配的表达式中使用百分号和下划线字符,必须在这些字符前使用转义字符,其缺省值为反斜杠(\)字符。
例如,下面的谓词查找与 IBM_Corp 匹配的内容。
Body.Trade.Company LIKE 'IBM\_Corp'
您可以使用 ESCAPE 子句指定其他转义字符。例如,您还可以如下所示指定上面的示例:
Body.Trade.Company LIKE 'IBM$_Corp' ESCAPE '$'