CASTs Implícitos para Comparações

Os operadores de comparação SQL padrão >, <, >=, <=, =, <> são suportados pela comparação de dois valores no ESQL.

Quando os tipos de dados dos dois valores não forem iguais, um deles pode ser implicitamente lançado para o tipo do outro para permitir que a comparação prossiga. Na tabela abaixo, o eixo vertical representa o operando esquerdo, o eixo horizontal representa o operando direito.

L significa que o operando direito é lançado para o tipo do operando esquerdo antes da comparação; e R significa o oposto; X significa que não ocorreu nenhum lançamento implícito e um espaço em branco significa que a comparação entre os valores dos dois tipos de dados não é suportada.
  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. Ao lançar de uma cadeia de caracteres para um intervalo, a cadeia de caracteres deve estar no formato INTERVAL '<valores>' <qualificador>. O formato <valores>, que é permitido para CAST explícito, não é permitido aqui, porque nenhum qualificador externo à cadeia foi fornecido.
  2. Ao lançar de um DATE para um TIMESTAMP ou GMTTIMESTAMP, a parte do tempo de TIMESTAMP é definida como todos os valores zero (00:00:00). Isso é diferente do comportamento do lançamento explícito, que define a parte do tempo como a hora atual.

Tipos Numéricos

Os operadores de comparação operam em todos os três tipos numéricos.

Cadeias de Caracteres

Você não pode definir uma ordem de intercalação alternativa que, por exemplo, intercale igualmente caracteres maiúsculos e minúsculos.

Ao comparar cadeias de caracteres, os espaços em branco finais não são significativos, portanto, a comparação 'hello' = 'hello ' retorna true.

Valores Datetime

Os valores Datetime são comparados de acordo com as regras naturais do calendário e do relógio gregorianos.

Você pode comparar o fuso horário com o qual está trabalhando com o fuso horário GMT. O fuso horário GMT é convertido em um fuso horário local com base na diferença entre o fuso horário local e a hora GMT especificada. Ao comparar a hora local com a hora GMT, a comparação é baseada na diferença em uma hora especificada em uma data especificada.

A conversão é sempre baseada no valor de LOCAL_TIMEZONE. Isto ocorre porque as datas e horas GMT são convertidas em datas e horas locais apenas se isto puder ser feito de forma não ambígua. A conversão de uma data e hora locais em uma data e hora GMT possui dificuldades durante o horário de verão e a conversão entre horas e horas GMT (sem informações de data) tem que ser feita com base no valor LOCAL_TIMEZONE, porque você não pode especificar qual diferença de fusos horários deve ser então utilizada.

Booleans

Os valores booleanos podem ser comparados utilizando todos os operadores de comparação normais. O valor TRUE é definido para ser maior que o valor FALSE. A comparação de qualquer valor com o valor boolean UNKNOWN (que é equivalente a NULL) retorna um resultado UNKNOWN.

Intervalos

Os intervalos são comparados pela conversão dos dois valores de intervalos em representações intermediárias, para que ambos os intervalos tenham o mesmo qualificador de intervalo. Os intervalos de ano-mês podem ser comparados apenas com outros intervalos de ano-mês e os intervalos de dia-segundo podem ser comparados apenas com outros intervalos de dia-segundo.

Por exemplo, se um intervalo for em minutos, tal como, INTERVAL '120' MINUTE é comparado com um intervalo em dias a segundos, tal como, INTERVAL '0 02:01:00', os dois intervalos serão convertidos primeiro em valores que possuem qualificadores de intervalos consistentes, que podem ser comparados. Portanto, neste exemplo, o primeiro valor é convertido em um intervalo em dias a segundos, que fornecerá INTERVAL '0 02:00:00', que pode ser comparado com o valor de segundo.

Comparando Cadeias de Caracteres com outros Tipos

Se uma cadeia de caracteres for comparada a um valor de outro tipo, o WebSphere Message Broker tentará lançar a cadeia de caracteres em um valor do mesmo tipo de dados como o outro valor.

Por exemplo, você pode gravar uma expressão:
'1234' > 4567
A cadeia de caracteres à esquerda é convertida em um inteiro antes de ocorrer a comparação. Este comportamento reduz algumas das necessidades de operadores CAST explícitos ao comparar valores derivados de uma mensagem XML genérica com valores literais. (Para obter detalhes de lançamentos explícitos que são suportados, consulte Coerções Suportadas). Este é o recurso que permite gravar a expressão a seguir:
Body.Trade.Quantity > 5000

Neste exemplo, a referência de campo à esquerda é avaliada para a cadeia de caracteres '1000' e, como ela está sendo comparada com um inteiro, essa cadeia de caracteres será convertida em um inteiro antes de ocorrer a comparação.

Você ainda deve verificar se o campo de preço que deseja interpretar como um decimal é maior que um limite especificado. Certifique-se de que o literal com o qual será comparado seja um valor decimal e não um inteiro.

Por exemplo:
Body.Trade.Price > 100
não tem o efeito desejado, porque o campo Price seria convertido em um inteiro e essa conversão falha porque a cadeia de caracteres contém um ponto decimal. No entanto, a seguinte expressão será bem-sucedida:
Body.Trade.Price > 100.00
Conceitos relacionados
Visão Geral do ESQL
Tarefas relacionadas
Desenvolvendo ESQL
Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
ak05700_