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 der beiden Werte implizit in den Typ des anderen Wertes umgesetzt werden, um den Vergleich zu ermöglichen. In der folgenden Tabelle stellt die vertikale Achse den linken Operanden dar und die horizontale Achse 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 der Vergleich der Werte der beiden Datentypen nicht unterstützt wird.
  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. Wenn eine Umsetzung vom Datentyp DATE in den Typ TIMESTAMP oder GMTTIMESTAMP stattfindet, wird der Teil der Zeitmarke, der die Uhrzeit angibt, auf Nullwerte gesetzt (00:00:00). Dieses Verhalten unterscheidet sich von der expliziten Umsetzung, bei der der Teil für die Uhrzeit auf die aktuelle Uhrzeit gesetzt wird.

Numerische Typen

Die Vergleichsoperatoren gelten für alle drei numerischen Typen.

Zeichenfolgen

Sie können keine alternative Sortierfolge definieren, die z. B. Groß- und Kleinbuchstaben gleich sortiert.

Bei dem Vergleich von Zeichenfolgen haben abschließende Leerzeichen keine Bedeutung, d. h., der Vergleich 'hello' = 'hello ' gibt 'true' zurück.

Werte für Datum und Uhrzeit

Werte für Datum und Uhrzeit werden gemäß den natürlichen Regeln des Gregorianischen Kalenders verglichen.

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

Die Konvertierung basiert immer auf dem Wert für LOCAL_TIMEZONE. Dies ist darauf zurückzuführen, dass GMT-Zeitmarken nur in Ortszeitmarken konvertiert werden, wenn diese Konvertierung eindeutig durchgeführt werden kann. Die Konvertierung einer Ortszeitmarke in eine GMT-Zeitmarke bereitet in der Zeit, in der auf Sommer- bzw. Winterzeit umgestellt wird, Schwierigkeiten, und die Konvertierung zwischen Uhrzeiten und GMT-Uhrzeiten (ohne Datumsangaben) muss auf dem Wert für LOCAL_TIMEZONE basieren, da Sie ansonsten nicht angegeben können, welche Zeitzonendifferenz verwendet werden soll.

Boolesche Werte

Boolesche Werte können mit Hilfe aller normalen Vergleichsoperatoren verglichen werden. Der Wert TRUE ist per Definition größer als der Wert FALSE. Der Vergleich eines der beiden Werte mit dem Booleschen Wert UNKNOWN (der äquivalent zu NULL ist) gibt das Ergebnis UNKNOWN zurück.

Intervalle

Intervalle werden verglichen, indem die beiden Intervallwerte in Zwischendarstellungen konvertiert werden, so dass beide Intervalle über dasselbe Intervallqualifikationsmerkmal verfügen. 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 Intervall in Tagen bis Sekunden, z. B. INTERVAL '0 02:01:00', verglichen wird, werden die beiden Intervalle zuerst in Werte konvertiert, die über konsistente Intervallqualifikationsmerkmale verfügen, die verglichen werden können. In diesem Beispiel wird also der erste Wert in ein Intervall in Tagen bis Sekunden konvertiert, was INTERVAL '0 02:00:00' ergibt. Dieser Wert kann dann mit dem zweiten Wert verglichen werden.

Zeichenfolgen mit anderen Typen vergleichen

Wenn eine Zeichenfolge mit einem Wert eines anderen Typs verglichen wird, versucht WebSphere Message Broker, die Zeichenfolge in einen Wert umzusetzen, dessen Datentyp mit dem Typ des anderen Wertes identisch ist.

Sie können beispielsweise folgenden Ausdruck schreiben:
'1234' > 4567
Die Zeichenfolge auf der linken Seite wird in eine Ganzzahl konvertiert, bevor der Vergleich stattfindet. Dank dieses Verhaltens sind explizite CAST-Operatoren nicht immer erforderlich, wenn Werte, die von einer generischen XML-Nachricht abgeleitet sind, mit Literalwerten verglichen werden. (Details zu unterstützten expliziten Umsetzungen finden Sie unter Unterstützte Umsetzungen.) Diese Funktion ermöglicht es Ihnen, folgenden Ausdruck zu schreiben:
Body.Trade.Quantity > 5000

In diesem Beispiel ergibt der Feldverweis auf der linken Seite die Zeichenfolge '1000', und da dieser Wert mit einer Ganzzahl verglichen wird, wird diese Zeichenfolge in eine Ganzzahl konvertiert, bevor der Vergleich stattfindet.

Sie müssen trotzdem überprüfen, ob das Feld 'Price', das als Dezimalzahl interpretiert werden soll, den angegebenen Grenzwert überschreitet. Stellen Sie sicher, dass das Literal, mit dem der Wert verglichen werden soll, ein Dezimalwert und keine Ganzzahl ist.

Beispiel:
Body.Trade.Price > 100
Dies hat nicht den gewünschten Effekt, da das Feld Price in eine Ganzzahl konvertiert wird, und diese Konvertierung schlägt fehl, da 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: 23. Aug. 2006
ak05700_