比較のための暗黙的 CAST

標準の SQL 比較演算子 >、<、>=、<=、=、<> が 2 つの値を ESQL で比較するためにサポートされています。

2 つの値のデータ・タイプが異なる場合は、どちらか一方が他方のタイプに暗黙的にキャストされるようにして、比較を行えるようにします。以下の表では、縦軸が左側のオペランドを表し、横軸が右側のオペランドを表しています。

L は比較する前に右側のオペランドが左側のオペランドのタイプにキャストされることを表し、R はその逆を表します。X は暗黙的キャストが行われないことを表し、ブランクは 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
注 :
  1. 文字ストリングをインターバルにキャストするときは、文字ストリングの形式は、INTERVAL '<values>' <qualifier> でなければなりません。<values> という形式は、明示的 CAST では使用できますが、ストリングの外部の修飾子を指定していないので、暗黙的 CAST の場合は使用できません。
  2. DATE から TIMESTAMP または GMTTIMESTAMP にキャストするときは、TIMESTAMP の時刻部分がすべてゼロの値 (00:00:00) に設定されます。この点は、明示的キャストの動作と異なります。明示的キャストでは、時刻部分が現在時刻に設定されます。

数値タイプ

比較演算子は、3 つの数値タイプすべてを操作対象とします。

文字ストリング

大文字と小文字を等しく照合するような代替照合順序を定義することはできません。

文字ストリングを比較するときは、末尾ブランクは意味をなさないので、'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
左辺の文字ストリングは、比較が行われる前に、整数に変換されます。このため、汎用 XML メッセージから派生した値をリテラル値と比較するときに、いくつかの明示的な CAST 演算子を指定する必要がなくなります。(サポートされる明示的キャストの詳細については、サポートされる CASTを参照してください。) 次のような式を立てることができるのは、この機能があるためです。
Body.Trade.Quantity > 5000

この例では、左辺のフィールド参照が文字ストリング '1000' と評価され、この文字ストリングは、(整数と比較されているので) 比較が行われる前に整数に変換されます。

10 進数として解釈する価格フィールドが、指定のしきい値より大きいかどうかを、依然としてチェックする必要があります。比較する対象のリテラルが、整数ではなく 10 進数の値であることを確認してください。

以下に例を示します。
Body.Trade.Price > 100
期待通りの効果は得られません。Price フィールドが整数に変換されますが、文字ストリングには小数点が含まれているので、その変換は失敗するためです。しかし、次の式は成功します。
Body.Trade.Price > 100.00
関連概念
ESQL の概要
関連タスク
ESQL の開発
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ak05700_