Funzioni CAST implicite per i confronti

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.

L indica che l'operatore di destra viene assegnato al tipo dell'operando di sinistra prima del confronto; R indica il contrario; X indica che non viene eseguita alcuna assegnazione implicita; uno spazio vuoto indica che il confronto tra i valori dei due tipi di dati non è supportato.
  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:
  1. Durante la conversione da una stringa di caratteri a un intervallo, la stringa di caratteri deve avere il formato INTERVAL '<values>' <qualifier>. Il formato <values>, che è abilitato per un CAST esplicito, non è qui abilitato per la mancanza di qualificatori esterni alla stringa.
  2. Quando si esegue l'assegnazione da DATE a TIMESTAMP oppure GMTTIMESTAMP, la parte di TIMESTAMP relativa all'ora è impostata su valori uguali a zero (00:00:00). Ciò è diverso dal funzionamento dell'assegnazione esplicita, che imposta la parte relativa all'ora sull'ora corrente.

Tipi numerici

Gli operatori di confronto funzionano su tutti e tre i tipi numerici.

Stringhe di caratteri

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.

Valori relativi a data ed ora

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.

Valori booleani

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.

Intervalli

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.

Confronto delle stringhe di caratteri con altri tipi

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.

Ad esempio, è possibile scrivere un'espressione:
'1234' > 4567
La stringa di caratteri a sinistra viene convertita in un integer prima che venga eseguito il confronto. Questo funzionamento riduce la necessità di operatori CAST espliciti quando si esegue il confronto di valori derivati da un messaggio XML generico con valori letterali. Per i dettagli relativi alle assegnazioni esplicite supportate, consultare Funzioni CAST supportate. E' questa la funzione che consente di scrivere la seguente espressione:
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.

Ad esempio:
Body.Trade.Price > 100
non produce l'effetto desiderato, perché il campo Price viene convertito in un integer e tale conversione non viene eseguita con esito positivo perché la stringa di caratteri contiene un punto decimale. Tuttavia, la seguente espressione ha esito positivo:
Body.Trade.Price > 100.00
Concetti correlati
Panoramica di ESQL
Attività correlate
Sviluppo di ESQL
Informazioni particolari | Marchi | Download | Libreria | Supporto | Commenti
Copyright IBM Corporation 1999, 2006 Ultimo aggiornamento: ago 17, 2006
ak05700_