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.
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:
|
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.
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.
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.
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.
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.
'1234' > 4567
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.
Body.Trade.Price > 100
Body.Trade.Price > 100.00