Gli operatori di confronto SQL standard >, <, >=, <=, =, <> sono supportati per il confronto di due valori in ESQL.
Quando i tipi di dati dei due valori non sono uguali, uno di essi può essere assegnato in modo implicito al tipo dell'altro, per consentire l'esecuzione del confronto. Nella tabella riportata di seguito, l'asse verticale rappresenta l'operando di sinistra e l'asse orizzontale rappresenta l'operando di destra.
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 | ||||||||||||
Note:
|
Non è possibile definire un ordine di confronto alternativo che, ad esempio, considera in modo uguale caratteri maiuscoli e minuscoli.
Quando si esegue il confronto di stringhe di caratteri, gli spazi vuoti finali non sono importanti, per cui il confronto 'hello' = 'hello ' restituisce true.
I valori relativi a data ed ora vengono confrontati in base alle regole naturali dell'orologio e del calendario gregoriano.
E' possibile confrontare il fuso orario utilizzato con il fuso orario GMT. Il fuso orario GMT viene convertito in un fuso orario locale in base alla differenza tra il fuso orario locale e l'ora GMT specificata. Quando si confronta l'ora locale con l'ora GMT, il confronto si basa sulla differenza ad un'ora indicata in una data indicata.
La conversione si basa sempre sul valore di LOCAL_TIMEZONE. Ciò perchè le date/ore GMT vengono convertite in date/ore locali solo se l'operazione può essere eseguita in modo non ambiguo. La conversione di una data/ora locale in una data/ora GMT presenta difficoltà relative all'ora legale, e la conversione tra le ore e le ore GMT (senza le informazioni relative alla data) deve essere eseguita in base al valore LOCAL_TIMEZONE, perché non è possibile specificare quale differenza di fuso orario utilizzare.
E' possibile confrontare i valori booleani utilizzando tutti i normali operatori di confronto. Il valore TRUE è definito come maggiore del valore FALSE. Il confronto di entrambi i valori con il valore booleano UNKNOWN (equivalente a NULL) restituisce un risultato UNKNOWN.
Gli intervalli vengono confrontati convertendo i due valori di intervallo in rappresentazioni intermedie, in modo che entrambi gli intervalli dispongano dello stesso qualificatore di intervallo. Gli intervalli anno-mese possono essere confrontati solo con altri intervallo anno-mese e gli intervalli giorno-secondo possono essere confrontati solo con altri intervalli giorno-secondo.
Ad esempio, se viene confrontato un intervallo in minuti, come INTERVAL '120' MINUTE con un intervallo in giorni a secondi, come, ad esempio, INTERVAL '0 02:01:00', i due intervalli vengono prima convertiti in valori con qualificatori di intervallo congruenti, che possono essere confrontati. Quindi, in questo esempio, il primo valore viene convertito in un intervallo in giorni a secondi, che fornisce INTERVAL '0 02:00:00', che può essere confrontato con il secondo valore.
Se una stringa di caratteri viene confrontata con un valore di un altro tipo, WebSphere Message Broker prova ad assegnare la stringa di caratteri in un valore dello stesso tipo di dati dell'altro valore.
'1234' > 4567
Body.Trade.Quantity > 5000
In questo esempio, il riferimento di campo a sinistra ha come risultato la stringa di caratteri '1000' e, poiché tale valore deve essere confrontato con un integer, tale stringa di caratteri viene convertita in un integer prima che venga eseguito il confronto.
E' sempre necessario verificare se il campo relativo al prezzo che si desidera venga interpretato come un decimale sia maggiore di una soglia specificata. Verificare che il letterale con cui viene confrontato sia un valore decimale e non un integer.
Body.Trade.Price > 100
Body.Trade.Price > 100.00