Descripción general
Uso directo de resultados condicionales
0, 1 o NULL. Por lo tanto, puedes usar los resultados condicionales directamente así:
Valores NULL en las expresiones condicionales
NULL en expresiones condicionales, el resultado también será NULL.
Nullable.
El siguiente ejemplo lo demuestra al no añadir una condición de igualdad a multiIf.
sentencia CASE
CASE WHEN ... THEN ... ELSE ... END
Esta forma ofrece total flexibilidad y se implementa internamente mediante la función multiIf. Cada condición se evalúa de forma independiente, y las expresiones pueden incluir valores no constantes.
CASE <expr> WHEN <val1> THEN ... WHEN <val2> THEN ... ELSE ... END
Esta forma más compacta está optimizada para comparar valores constantes y utiliza internamentecaseWithExpression().
Consideraciones
multiIf) antes de evaluar cualquier condición. Esto es importante cuando las expresiones de retorno difieren en el tipo, por ejemplo, con distintas zonas horarias o tipos numéricos.
- El tipo de resultado se elige en función del tipo compatible más amplio entre todas las ramas.
- Una vez elegido este tipo, todas las demás ramas se convierten implícitamente a él, aunque su lógica nunca llegue a ejecutarse en tiempo de ejecución.
- En tipos como DateTime64, donde la zona horaria forma parte de la firma del tipo, esto puede dar lugar a comportamientos inesperados: la primera zona horaria encontrada puede usarse para todas las ramas, incluso cuando otras ramas especifican zonas horarias diferentes.
Asia/Kolkata
DateTime64(3, <timezone>). Infiere que el tipo común es DateTime64(3, 'Asia/Kolkata' por ser el primero que encuentra, y convierte implícitamente las demás ramas a este tipo.
Esto puede solucionarse convirtiéndolo en una cadena para conservar el formato de zona horaria previsto:
clamp
value— El valor que se va a acotar. -min— El límite mínimo. -max— El límite máximo.
Query
Response
Query
Response
Query
Response
greatest
NULL se ignoran.
- Para arrays, devuelve el array lexicográficamente mayor.
- Para los tipos
DateTime, el tipo del resultado se amplía al tipo más grande (p. ej.,DateTime64si se mezcla conDateTime32).
Use la configuración
least_greatest_legacy_null_behavior para cambiar el comportamiento de NULLLa versión 24.12 introdujo un cambio incompatible con versiones anteriores por el que los valores NULL se ignoran, mientras que antes devolvía NULL si uno de los argumentos era NULL.
Para conservar el comportamiento anterior, establezca la configuración least_greatest_legacy_null_behavior (valor predeterminado: false) en true.x1[, x2, ...]— Uno o varios valores para comparar. Todos los argumentos deben ser de tipos comparables.Any
Any
Ejemplos
Tipos numéricos
Query
Response
Query
Response
Query
Response
if
- Si la condición
condse evalúa como un valor distinto de cero, la función devuelve el resultado de la expresiónthen. - Si
condse evalúa como cero o NULL, se devuelve el resultado de la expresiónelse.
short_circuit_function_evaluation controla si se utiliza la evaluación de cortocircuito.
Si está habilitada, la expresión then se evalúa solo en las filas en las que cond es verdadero, y la expresión else, en las que cond es falso.
Por ejemplo, con la evaluación de cortocircuito, no se produce ninguna excepción por división entre cero al ejecutar la siguiente consulta:
then y else deben ser de tipo similar.
Sintaxis
cond— La condición evaluada.UInt8oNullable(UInt8)oNULLthen— La expresión que se devuelve sicondes verdadera. -else— La expresión que se devuelve sicondes falsa oNULL.
then o else, según la condición cond.
Ejemplos
Ejemplo de uso
Query
Response
least
NULL se ignoran.
- Para arrays, devuelve el array menor en orden lexicográfico.
- Para los tipos DateTime, el tipo de resultado se promueve al tipo más grande (p. ej., DateTime64 si se mezcla con DateTime32).
Use la configuración
least_greatest_legacy_null_behavior para cambiar el comportamiento de NULLLa versión 24.12 introdujo un cambio no retrocompatible por el que los valores NULL se ignoran, mientras que antes devolvía NULL si uno de los argumentos era NULL.
Para conservar el comportamiento anterior, establezca la configuración least_greatest_legacy_null_behavior (valor predeterminado: false) en true.x1[, x2, ...]— Un único valor o varios valores para comparar. Todos los argumentos deben ser de tipos comparables.Any
Any
Ejemplos
Tipos numéricos
Query
Response
Query
Response
Query
Response
multiIf
CASE de forma más compacta en la consulta.
Evalúa cada condición en orden. Para la primera condición que sea verdadera (distinta de cero y no NULL), devuelve el valor de la rama correspondiente.
Si ninguna de las condiciones es verdadera, devuelve el valor de else.
El ajuste short_circuit_function_evaluation controla
si se utiliza la evaluación de cortocircuito. Si está habilitada, la expresión then_i se evalúa solo en las filas donde
((NOT cond_1) AND ... AND (NOT cond_{i-1}) AND cond_i) es verdadera.
Por ejemplo, con la evaluación de cortocircuito, no se lanza ninguna excepción por división entre cero al ejecutar la siguiente consulta:
NULL se tratan como falsas.
Sintaxis
caseWithoutExpression, caseWithoutExpr
Argumentos
cond_N— La enésima condición evaluada que determina si se devuelvethen_N.UInt8oNullable(UInt8)oNULLthen_N— El resultado de la función cuandocond_Nes verdadero. -else— El resultado de la función si ninguna condición es verdadera.
then_N para el cond_N que se cumpla; en caso contrario, devuelve el valor de else.
Ejemplos
Ejemplo de uso
Query
Response