Transformaciones CAST implícitas para comparaciones

Se da soporte a los operadores de comparación SQL estándar >, <, >=, <=, =, <> para comparar dos valores en ESQL.

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

L significa que se efectúa una transformación CAST del tipo del operando de la derecha en el de la izquierda antes de la comparación. R significa lo opuesto. X significa que no se efectúa ninguna transformación CAST y un espacio en blanco significa que no está soportada la comparación entre los dos valores de los 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
Notas:
  1. Cuando se efectúa la 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>, se permite para una transformación CAST explícita, pero no se permite en este caso porque no se ha proporcionado un calificador externo a la serie de caracteres.
  2. Cuando se efectúa la transformación CAST de DATE a TIMESTAMP o GMTTIMESTAMP, la parte de TIMESTAMP correspondiente a la hora se establece toda en valores de cero (00:00:00). Esto es diferente del comportamiento de la transformación CAST explícita que establece la parte correspondiente al tiempo 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 comparación alternativo que, por ejemplo, compare del mismo modo los caracteres en mayúsculas y en minúsculas.

Cuando se comparan series de caracteres, los espacios blancos de cola no son significativos, por lo tanto, la comparación 'hello' = 'hello ' devuelve true

Valores de fecha y hora

Los valores de fecha y hora se comparan según las normas naturales del calendario gregoriano y el reloj.

Puede comparar el huso horario con el que está trabajando en el huso horario GMT. El huso horario GMT se convierte al huso horario local basándose en la diferencia entre el huso horario local y la hora GMT especificada. Cuando compara el huso horario local con la hora GMT, la comparación se basa en la diferencia entre una hora determinada de una fecha determinada.

La conversión siempre está basada en el valor de LOCAL_TIMEZONE. Esto es debido a que las indicaciones de la hora GMT se convierten a indicaciones de la hora locales solamente si se puede hacer sin ambigüedades. Convertir una indicación de la hora local a una indicación de la hora GMT presenta dificultades en la relación con las horas del día de ahorro energético y la conversión entre horas y horas GMT (sin información de fecha) se tiene que llevar a cabo en base al valor de LOCAL_TIMEZONE debido a que no puede especificar que diferencia de huso horario utilizar de otro modo.

Booleanos

Los valores booleanos se pueden comparar utilizando todos los operadores de comparación normales El valor TRUE se define de modo que es mayor que el valor de FALSE. Al comparar cualquier valor con el valor booleano UNKNOWN (que es equivalente a NULL) devuelve como resultado UNKNOWN.

Intervalos

Los intervalos se comparan convirtiendo los dos valores de intervalo en representaciones intermedias, por lo tanto, ambos intervalos tienen 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 se pueden compara con otros intervalos de día-segundo.

Por ejemplo, si se compara un intervalo en minutos como, por ejemplo, INTERVAL '120' MINUTE con un intervalo en días a segundos como, por ejemplo, INTERVAL '0 02:01:00', en primer lugar se convierten los dos intervalos en valores que tienen calificadores de intervalos coherentes que se pueden comparar. Por lo tanto, en este ejemplo, el primer valor se convierte en un intervalo de días a segundos, lo que proporciona INTERVAL '0 02:00:00', que se puede comparar con el segundo valor.

Comparación de series de caracteres con otros tipos

Si se compara una serie de caracteres con un valor de otro tipo, WebSphere Message Broker intenta efectuar la transformación CAST de la serie de caracteres en 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 en un entero antes de que se lleve a cabo la comparación. Este comportamiento disminuye la necesidad de operadores CAST explícitos cuando se comparan valores derivados de un mensaje XML genérico con valores literales. Para obtener información detallada acerca de las transformaciones CAST soportadas, consulte Transformaciones CAST soportadas.) Este es un recurso que le permite escribir la expresión siguiente:
Body.Trade.Quantity > 5000

En este ejemplo, la referencia de campo de la izquierda se evalúa en la serie de caracteres '1000' y, debido a que se compara en un entero, la serie de caracteres se convierte en un entero antes de que se lleva a cabo la comparación.

Debe continuar comprobando si el campo de precio que desea interpretar como un decimal es mayor que el umbral proporcionado. 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 debido a que el campo Price se convierte en un entero y dicha conversión no se ejecuta correctamente debido a que la serie de caracteres contiene una coma decimal. No obstante, la expresión siguiente se ejecuta correctamente:
Body.Trade.Price > 100.00
Conceptos relacionados
Visión general de ESQL
Tareas relacionadas
Desarrollo de ESQL
Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
ak05700_