Transformaciones CAST implícitas para comparaciones

Los operadores de comparación de SQL estándar >, <, >=, <=, =, <> están soportados en ESQL para comparar dos valores.

Cuando los tipos de datos de ambos valores no son iguales, se puede efectuar una transformación CAST implícita de uno de ellos al tipo del otro para que pueda realizarse la comparación. En la tabla siguiente, el eje vertical representa el operando de la izquierda y el eje horizontal representa el operando de la derecha.

L quiere decir que se efectúa una transformación CAST del operando de la derecha al tipo del operando de la izquierda antes de la comparación; R quiere decir lo contrario; X quiere decir que no se efectúa ninguna transformación CAST implícita; un blanco significa que no está soportada la comparación entre los valores de ambos tipos de datos.
  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
Notes:
  1. Cuando se efectúa una transformación CAST de una serie de caracteres a un intervalo, la serie de caracteres debe tener el formato INTERVAL '<valores>' <calificador>. El formato <valores>, que está permitido para una CAST explícita, no está permitido en este caso porque no se ha proporcionado ningún calificador externo a la serie.
  2. Cuando se efectúa una transformación CAST de DATE a TIMESTAMP o GMTTIMESTAMP, la parte de la hora de TIMESTAMP se establece en ceros (00:00:00). En esto se diferencia del comportamiento de la CAST explícita, que establece la parte de la hora en la hora actual.

Tipos numéricos

Los operadores de comparación operan en los tres tipos numéricos.

Series de caracteres

No puede definir un orden de clasificación alternativo que, por ejemplo, clasifique por igual los caracteres en mayúsculas y en minúsculas.

Al comparar series de caracteres, los blancos de cola no son significativos, por lo que la comparación 'hola' = 'hola ' devuelve un resultado positivo.

Valores de fecha y hora

Los valores de fecha y hora se comparan de acuerdo a las normas naturales del calendario gregoriano y el reloj.

Puede comparar el huso horario en el que trabaja con el huso horario GMT. El huso horario GMT se convierte al huso horario local de acuerdo a la diferencia entre el huso horario local y la hora GMT especificada. Al comparar la hora local con la hora GMT, la comparación se basa en la diferencia a una hora dada en una fecha dada.

La conversión se basa siempre en el valor de LOCAL_TIMEZONE. Esto se debe a que las indicaciones horarias GMT sólo se convierten a las indicaciones horarias locales si esto se puede hacer de forma no ambigua. La conversión de una indicación horaria local a una indicación horaria GMT tiene dificultades respecto al tiempo de recorte del horario de verano, y la conversión entre la hora local y la hora GMT (sin información de fecha) tiene que realizarse según el valor LOCAL_TIMEZONE, porque no puede especificar de otro modo cuál es la diferencia entre husos horarios.

Booleanos

Los valores booleanos pueden compararse mediante todos los operadores de comparación normales. El valor TRUE se define mayor que el valor FALSE. La comparación de uno de estos valores con el valor booleano UNKNOWN (que es equivalente a NULL) devuelve un resultado UNKNOWN.

Intervalos

Los intervalos se comparan convirtiendo los dos valores de intervalo a representaciones intermedias,para que ambos intervalos tengan el mismo calificador de intervalo. Los intervalos de año-mes sólo se pueden comparar con otros intervalos de año-mes, y los intervalos de día-segundo sólo con otros intervalos de día-segundo.

Por ejemplo, si un intervalo en minutos como, por ejemplo, INTERVAL '120' MINUTE se compara con un intervalo en días y segundos como, por ejemplo, INTERVAL '0 02:01:00', en primer lugar ambos intervalos se convierten a valores que tienen calificadores de intervalo coherentes que se puedan comparar. Así pues, en este ejemplo, el primer valor se convierte a un intervalo en días y segundos, que da INTERVAL '0 02:00:00', el cual puede compararse con el segundo valor.

Comparación de series de caracteres con otros tipos

Si una serie de caracteres se compara con un valor de otro tipo, WebSphere Business Integration Message Broker intenta efectuar una transformación CAST de la serie de caracteres a un valor del mismo tipo de datos que el otro valor.

Por ejemplo, puede escribir una expresión:
'1234' > 4567
La serie de caracteres de la izquierda se convierte a un entero antes de llevar a cabo la comparación. Este funcionamiento reduce en parte la necesidad de operadores CAST explícitos al comparar valores derivados de un mensaje XML genérico con valores literales. (Para obtener detalles sobre los CAST explícitos soportados, consulte el apartado Transformaciones soportadas.) Este recurso le permite escribir la siguiente expresión:
Body.Trade.Quantity > 5000

En este ejemplo, la referencia de campo de la izquierda se evalúa como la serie de caracteres '1000' y, dado que se compara con un entero, dicha serie de caracteres se convierte a un entero antes de que se lleve a cabo la comparación.

Todavía debe comprobar si el campo del precio que desea que se interprete como decimal es mayor que un umbral determinado. Asegúrese de que el literal con el que lo compara es un valor decimal y no un entero.

Por ejemplo:
Body.Trade.Price > 100
no tiene el efecto deseado, ya que el campo Price se convierte a un entero y esa conversión da error porque la serie de caracteres contiene una coma decimal. Sin embargo, la expresión siguiente se ejecuta correctamente:
Body.Trade.Price > 100.00

Conceptos relacionados
ESQL

Tareas relacionadas
Desarrollo de ESQL

Referencia relacionada
Funciones ESQL complejas
Transformaciones soportadas
Transformaciones CAST implícitas
Transformaciones CAST implícitas para operaciones aritméticas
Transformaciones CAST implícitas para asignación