用于比较的隐式 CAST

支持标准 SQL 比较运算符 >、<、>=、<=、= 和 <> 用于比较 ESQL 中的两个值。

当两个值的数据类型不相同时,它们中的一个可隐式地强制类型转换为其他类型以允许比较继续。在下表中,垂直轴表示左手操作数,水平轴表示右手操作数。

“L”意味着在比较之前右操作数数据类型强制转换为左操作数类型,“R”与“L”的意思相反,“X”意味着未发生隐式数据类型强制转换,空白表示不支持两种数据类型值之间的比较。
  ukn bln int float dec char time gtm date ts gts ivl blob bit
ukn                            
bln   X       L                
int     X R R L                
float     L X L L                
dec     L R X L                
chr   R R R R X R R R R R R1 R R
tm           L X L            
gtm           L R X            
dt           L     X R2 R2      
ts           L     L2 X L      
gts           L     L2 R X      
ivl           L1           X    
blb           L             X  
bit           L               X
注:
  1. 当从字符串数据类型强制转换为时间间隔时,字符串必须是格式 INTERVAL '<values>' <qualifier>。在此不允许为显式 CAST 允许的格式 <values>,因为没有在字符串外部提供限定符。
  2. 从 DATE 数据类型转换为 TIMESTAMP 或 GMTTIMESTAMP 时,TIMESTAMP 的时间部分设置为全零值(00:00:00)。它不同于显式数据强制类型转换的行为,显式数据强制类型转换将时间部分设置为当前时间。

数字类型

比较运算符处理所有三种数字类型。

字符串

例如,您无法定义同等地整理大写和小写字符的备用整理顺序。

比较字符串时,尾部空格没有意义,因为比较 'hello' = 'hello ' 返回 true。

日期时间值

依照 Gregorian 日历和时钟的自然规则来比较日期时间值。

您可以将您工作所在的时区与 GMT 时区比较。根据您的本地时区和指定的 GMT 时间之间的时区差异,将 GMT 时区转换为本地时区。将您的本地时区与 GMT 时间相比较时,此比较基于给定日期内给定时间的差异。

转换总是基于 LOCAL_TIMEZONE 的值。这是因为只有在可以明确转换时,GMT 时间戳记才转换为本地时间戳记。将本地时间戳记转换为 GMT 时间戳记在夏时制转换时中有困难,必须基于 LOCAL_TIMEZONE 值执行时间和 GMT 时间(不带日期信息)之间的转换,因为您无法指定使用的时区差异。

布尔值

可使用所有或正常的比较运算符来比较布尔值。TRUE 值定义为比 FALSE 值大。将每个值与 UNKNOWN 布尔值(其等价于 NULL)相比较返回一个 UNKNOWN 结果。

时间间隔

将两个间隔值转换为中间表示来比较间隔,以便两个间隔具有相同的间隔限定符。年-月时间间隔只能与其他年-月时间间隔比较,天-秒时间间隔只能与其他天秒时间间隔比较。

例如,如果一个以分钟为单位的时间间隔(如 INTERVAL '120' MINUTE)与以天到秒为单位的时间间隔(如 INTERVAL '0 02:01:00')进行比较,则两个时间间隔首先转换成可比较的、具有一致的时间间隔限定符的值。 因此,在此示例中,第一个值转换成以天到秒为单位的时间间隔,它给出 INTERVAL '0 02:00:00',可与第二个值进行比较。

将字符串与其他类型作比较

如果字符串与另一种类型的值比较,则 WebSphere Message Broker 尝试将字符串数据类型强制转换为与其他值数据类型相同的值。

例如,您可以写表达式:
'1234' > 4567
在比较发生之前,左边的字符串将转换为一个整数。将从通用 XML 消息而来的值与文 字值比较之前,此行为减少显式 CAST 运算符的某些需要。(有关支持的显式强制类型转换,请参阅 支持的类型强制转换。)这是允许您编写以下表达式的工具:
Body.Trade.Quantity > 5000

在此示例中,左边的字段引用求值为字符串 1000 并且,因为它正在与一个整数比较,所以该字符串在发生比较之前转换为一个整数。

您必须还要检查您想解释为一个十进制数的价格字段是否大于给定的阈值。确保进行比较的文字是一个十进制数值而不是整数。

例如:
Body.Trade.Price > 100
没有期望的结果,因为 Price 字段将转换为一个整数,并且该转换失败,因为字符串包含一个十进制小数点。但是,以下表达式会成功:
Body.Trade.Price > 100.00
相关概念
ESQL 概述
相关任务
正在开发 ESQL
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
ak05700_