Implizite CAST-Umsetzungen für Vergleiche

Die standardmäßigen SQL-Vergleichsoperatoren >, <, >=, <=, =, <> werden zum Vergleichen von zwei Werten in ESQL unterstützt.

Wenn die Datentypen der beiden Werte nicht identisch sind, kann einer von ihnen implizit in den Typ des anderen Wertes umgesetzt werden, um den Vergleich durchzuführen. In der folgenden Tabelle steht die vertikale Achse für den linken Operanden und die horizontale Achse für den rechten Operanden.

L bedeutet, dass der rechte Operand vor dem Vergleich in den Typ des linken Operanden umgesetzt wird; R bedeutet das Gegenteil; X bedeutet, dass keine implizite Umsetzung stattfindet; ein Leerzeichen bedeutet, dass Vergleiche zwischen den Werten der beiden Datentypen nicht unterstützt werden.
  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
Hinweise:
  1. Bei der Umsetzung einer Zeichenfolge in ein Intervall muss die Zeichenfolge das Format INTERVAL '<Werte>' <Qualifikationsmerkmal> haben. Das für explizite CAST-Umsetzungen zulässige Format <Werte> ist hier nicht zulässig, da kein Qualifikationsmerkmal außerhalb der Zeichenfolge angegeben wird.
  2. Bei der Umsetzung von einem DATE-Typ in einen TIMESTAMP- oder GMTTIMESTAMP-Typ wird der Teil von TIMESTAMP, der die Zeit angibt, vollständig auf Nullwerte gesetzt (00:00:00). Dies unterscheidet sich vom Verhalten bei einer expliziten Umsetzung, wo dieser Teil auf das aktuelle Datum gesetzt wird.

Numerische Typen

Die Vergleichsoperatoren funktionieren für alle drei numerischen Typen.

Zeichenfolgen

Sie können keine alternative Sortierfolge definieren, bei der beispielsweise Groß- und Kleinbuchstaben in gleicher Weise sortiert werden.

Bei Vergleichen von Zeichenfolgen werden folgende Leerzeichen nicht berücksichtigt, d. h. der Vergleich 'hello' = 'hello ' führt zu dem Ergebnis 'wahr' (true).

Werte für Datum und Uhrzeit

Werte für Datum und Uhrzeit werden in Übereinstimmung mit den natürlichen Regeln des Gregorianischen Kalenders und der Uhrzeit verglichen.

Sie können die Zeitzone, in der Sie arbeiten, mit der Zeitzone GMT (Westeuropäische Zeit) vergleichen. Die Zeitzone GMT wird auf Basis der Differenz zwischen der Ortszeitzone und der angegebenen GMT-Zeit in eine Ortszeitzone konvertiert. Wenn Sie die Ortszeit mit der GMT-Zeit vergleichen, basiert der Vergleich auf der Differenz zu einer bestimmten Zeit an einem bestimmten Datum.

Ausgangswert der Konvertierung ist immer der Wert von LOCAL_TIMEZONE. Der Grund dafür ist, dass GMT-Zeitmarken nur dann in lokale Zeitmarken konvertiert werden, wenn das Ergebnis unzweideutig ist. Die Konvertierung einer Zeitmarke der Ortszeitzone in eine GMT-Zeitmarke stellt während der Umstellung auf Sommerzeit ein Problem dar, und die Konvertierung zwischen Ortszeiten und GMT-Zeiten (ohne Datumsangabe) muss auf Basis des Wertes von LOCAL_TIMEZONE erfolgen, weil Sie keine andere Zeitzonendifferenz für die Umsetzung angeben können.

Boolesche Werte

Für die Vergleiche von Booleschen Werten können alle normalen Vergleichsoperatoren verwendet werden. Der Wert TRUE ist per Definition größer als der Wert FALSE. Jeder Vergleich eines Wertes mit dem Booleschen Wert UNKNOWN (entspricht dem Wert NULL) führt zu dem Ergebnis UNKNOWN.

Intervalle

Intervalle werden verglichen, indem die beiden Intervallwerte in Zwischenwerte konvertiert werden, so dass beide Intervalle dasselbe Intervall-Qualifikationsmerkmal haben. Jahr-Monat-Intervalle können nur mit anderen Jahr-Monat-Intervallen und Tag-Sekunde-Intervalle nur mit anderen Tag-Sekunde-Intervallen verglichen werden.

Wenn beispielsweise ein Intervall in Minuten, z. B. INTERVAL '120' MINUTE mit einem Tag-Sekunde-Intervall, z. B. INTERVAL '0 02:01:00' verglichen wird, werden beide Intervalle zunächst in Werte mit konsistenten Qualifikationsmerkmalen, die verglichen werden können, konvertiert. Für dieses Beispiel bedeutet dies, dass der erste Wert in ein Tag-Sekunde-Intervall konvertiert wird, nämlich in INTERVAL '0 02:00:00', das mit dem zweiten Wert verglichen werden kann.

Vergleich von Zeichenfolgen mit anderen Datentypen

Beim Vergleich einer Zeichenfolge mit einem Wert eines anderen Datentyps versucht WebSphere Message Broker, die Zeichenfolge in einen Wert mit demselben Datentyp wie der andere Wert umzusetzen.

Sie können beispielsweise folgenden Ausdruck erstellen:
'1234' > 4567
Die Zeichenfolge auf der linken Seite wird vor dem Vergleich in eine ganze Zahl konvertiert. Durch dieses Verhalten werden weniger explizite CAST-Operatoren benötigt, wenn Werte, die aus einer generischen XML-Nachricht abgeleitet werden, mit Literalwerten verglichen werden. (Details zu unterstützten expliziten Umsetzungen finden Sie unter Unterstützte Umsetzungen.) Diese Fähigkeit ermöglicht es Ihnen, folgenden Ausdruck zu schreiben:
Body.Trade.Quantity > 5000

In diesem Beispiel ergibt die Auswertung der Feldverweise auf der linken Seite die Zeichenfolge '1000', und da es sich um einen Vergleich mit einer ganzen Zahl handelt, wird diese Zeichenfolge vor Ausführung des Vergleichs in eine ganze Zahl konvertiert.

Sie müssen noch überprüfen, ob das Preisfeld, das als Dezimalzahl interpretiert werden soll, größer als ein angegebener Grenzwert ist. Stellen Sie sicher, dass es sich bei dem Literal, mit dem verglichen wird, um einen Dezimalwert und nicht um eine ganze Zahl handelt.

Beispiel:
Body.Trade.Price > 100
hat nicht die gewünschte Wirkung, weil das Feld Price in eine ganze Zahl konvertiert wird und diese Konvertierung fehlschlägt, weil die Zeichenfolge ein Dezimalzeichen enthält. Der folgende Ausdruck ist jedoch erfolgreich:
Body.Trade.Price > 100.00
Zugehörige Konzepte
Übersicht zu ESQL
Zugehörige Tasks
ESQL erstellen
Bemerkungen | Marken | Downloads | Bibliothek | Unterstützung | Rückmeldung
Copyright IBM Corporation 1999, 2006 Letzte Aktualisierung: 18.05.2006
ak05700_