標準の SQL 比較演算子 >、<、>=、<=、=、<> が 2 つの値を ESQL で比較するためにサポートされています。
2 つの値のデータ・タイプが異なる場合は、どちらか一方が他方のタイプに暗黙的にキャストされるようにして、比較を行えるようにします。以下の表では、縦軸が左側のオペランドを表し、横軸が右側のオペランドを表しています。
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 | ||||||||||||
注 :
|
大文字と小文字を等しく照合するような代替照合順序を定義することはできません。
文字ストリングを比較するときは、末尾ブランクは意味をなさないので、'hello' = 'hello ' という比較は真を戻します。
日時値の比較は、グレゴリオ暦の規則に従ってなされます。
現地のタイム・ゾーンを GMT タイム・ゾーンと比較することができます。GMT タイム・ゾーンは、現地タイム・ゾーンと指定した GMT 時刻との間の時差に基づいて、現地タイム・ゾーンに変換されます。現地時間を GMT 時刻と比較するときは、指定の日付の指定の時刻における時差に基づいて比較が行われます。
変換は、常に LOCAL_TIMEZONE の値に基づいて実行されます。GMT タイム・スタンプがローカル・タイム・スタンプに変換されるのは、変換にあいまいさが伴わない場合だけだからです。ローカル・タイム・スタンプから GMT タイム・スタンプへの変換には、夏時間調整に関する障害があります。また、現地時間と GMT 時刻との間の変換 (日付情報なし) は、使用するタイム・ゾーンの時差を指定することができないので、LOCAL_TIMEZONE 値に基づいて実行する必要があります。
ブール値の比較には、通常の比較演算子をすべて使用できます。TRUE 値は、FALSE 値よりも大きいと定義されます。両方の値を UNKNOWN ブール値 (NULL と同等) と比較すると、UNKNOWN の結果が戻されます。
インターバルの比較は、両方のインターバルのインターバル修飾子が同じになるよう、2 つのインターバル値を中間表現に変換することによって行われます。年 - 月のインターバルは、他の年 - 月のインターバルとしか比較できません。日 - 秒のインターバルは、他の日 - 秒のインターバルとしか比較できません。
例として、分単位のインターバル (例えば、INTERVAL '120' MINUTE) を日 - 秒のインターバル (例えば、INTERVAL '0 02:01:00') と比較する場合は、2 つのインターバルは、まず共通のインターバル修飾子のある値に変換され、それらの値を比較できます。したがって、この例では、最初の値が日 - 秒のインターバル (INTERVAL '0 02:00:00') に変換され、これが 2 番目の値と比較されます。
文字ストリングを別のタイプの値と比較する場合は、WebSphere Message Broker は、文字ストリングを他の値と同じデータ・タイプの値にキャストしようとします。
'1234' > 4567
Body.Trade.Quantity > 5000
この例では、左辺のフィールド参照が文字ストリング '1000' と評価され、この文字ストリングは、(整数と比較されているので) 比較が行われる前に整数に変換されます。
10 進数として解釈する価格フィールドが、指定のしきい値より大きいかどうかを、依然としてチェックする必要があります。比較する対象のリテラルが、整数ではなく 10 進数の値であることを確認してください。
Body.Trade.Price > 100
Body.Trade.Price > 100.00