Visão geral
Usando resultados condicionais diretamente
0, 1 ou NULL. Portanto, você pode usar esses resultados diretamente assim:
Valores NULL em condicionais
NULL estão envolvidos em condicionais, o resultado também será NULL.
Nullable.
O exemplo a seguir demonstra isso ao não adicionar a condição de igualdade a multiIf.
Instrução CASE
CASE WHEN ... THEN ... ELSE ... END
Esta forma oferece total flexibilidade e é implementada internamente com a função multiIf. Cada condição é avaliada de forma independente, e as expressões podem incluir valores não constantes.
CASE <expr> WHEN <val1> THEN ... WHEN <val2> THEN ... ELSE ... END
Essa forma mais compacta é otimizada para correspondência com valores constantes e usa internamentecaseWithExpression().
Ressalvas
multiIf) antes de avaliar quaisquer condições. Isso é importante quando as expressões de retorno diferem em tipo, como no caso de fusos horários ou tipos numéricos diferentes.
- O tipo de resultado é selecionado com base no maior tipo compatível entre todos os ramos.
- Depois que esse tipo é selecionado, todos os outros ramos são convertidos implicitamente para ele, mesmo que sua lógica nunca venha a ser executada em tempo de execução.
- Para tipos como DateTime64, em que o fuso horário faz parte da assinatura do tipo, isso pode levar a um comportamento inesperado: o primeiro fuso horário encontrado pode ser usado para todos os ramos, mesmo quando outros ramos especificam fusos horários diferentes.
Asia/Kolkata
DateTime64(3, <timezone>). Ele infere o tipo comum como DateTime64(3, 'Asia/Kolkata' por ser o primeiro que encontra, convertendo implicitamente os outros ramos para esse tipo.
Isso pode ser resolvido convertendo para string para preservar a formatação de fuso horário desejada:
clamp
value— O valor a ser restringido. -min— O limite mínimo. -max— O limite máximo.
Query
Response
Query
Response
Query
Response
greatest
NULL são ignorados.
- Para arrays, retorna o array lexicograficamente maior.
- Para tipos
DateTime, o tipo do resultado é promovido ao maior tipo (por exemplo,DateTime64se combinado comDateTime32).
Use a configuração
least_greatest_legacy_null_behavior para alterar o comportamento de NULLA versão 24.12 introduziu uma alteração incompatível com versões anteriores, de modo que os valores NULL são ignorados, enquanto antes a função retornava NULL se um dos argumentos fosse NULL.
Para manter o comportamento anterior, defina a configuração least_greatest_legacy_null_behavior (padrão: false) como true.x1[, x2, ...]— Um ou mais valores a serem comparados. Todos os argumentos devem ser de tipos comparáveis.Any
Any
Exemplos
Tipos numéricos
Query
Response
Query
Response
Query
Response
if
- Se a condição
condfor avaliada como um valor diferente de zero, a função retorna o resultado da expressãothen. - Se
condfor avaliada como zero ou NULL, o resultado da expressãoelseserá retornado.
short_circuit_function_evaluation controla se a avaliação de curto-circuito é usada.
Se estiver habilitada, a expressão then será avaliada apenas nas linhas em que cond for true, e a expressão else, naquelas em que cond for false.
Por exemplo, com a avaliação de curto-circuito, não é lançada nenhuma exceção de divisão por zero ao executar a seguinte consulta:
then e else devem ser de tipos semelhantes.
Sintaxe
cond— A condição avaliada.UInt8ouNullable(UInt8)ouNULLthen— A expressão retornada secondfor true. -else— A expressão retornada secondfor false ouNULL.
then ou else, dependendo da condição cond.
Exemplos
Exemplo de uso
Query
Response
least
NULL são ignorados.
- Para arrays, retorna o array lexicograficamente menor.
- Para tipos DateTime, o tipo do resultado é promovido para o maior tipo (por exemplo, DateTime64 se combinado com DateTime32).
Use a configuração
least_greatest_legacy_null_behavior para alterar o comportamento de NULLA versão 24.12 introduziu uma alteração incompatível com versões anteriores, de modo que os valores NULL são ignorados, enquanto antes a função retornava NULL se um dos argumentos fosse NULL.
Para manter o comportamento anterior, defina a configuração least_greatest_legacy_null_behavior (padrão: false) como true.x1[, x2, ...]— Um único valor ou vários valores a serem comparados. Todos os argumentos devem ser de tipos comparáveis.Any
Any
Exemplos
Tipos numéricos
Query
Response
Query
Response
Query
Response
multiIf
CASE de forma mais compacta na consulta.
Avalia cada condição em ordem. Para a primeira condição que for true (diferente de zero e não NULL), retorna o valor correspondente.
Se nenhuma das condições for true, retorna o valor de else.
A configuração short_circuit_function_evaluation controla
se a avaliação de curto-circuito é usada. Se estiver ativada, a expressão then_i será avaliada apenas nas linhas em que
((NOT cond_1) AND ... AND (NOT cond_{i-1}) AND cond_i) for true.
Por exemplo, com avaliação de curto-circuito, nenhuma exceção de divisão por zero é lançada ao executar a seguinte consulta:
else devem ter um supertipo comum. As condições NULL são tratadas como falsas.
Sintaxe
caseWithoutExpression, caseWithoutExpr
Argumentos
cond_N— A enésima condição avaliada, que determina sethen_Nserá retornado.UInt8ouNullable(UInt8)ouNULLthen_N— O resultado da função quandocond_Né true. -else— O resultado da função se nenhuma das condições for true.
then_N para o cond_N correspondente; caso contrário, retorna o resultado de else.
Exemplos
Exemplo de uso
Query
Response