Reglas de llamada a funciones

Las siguientes reglas se aplican a todas las funciones, a menos que se indique lo contrario de forma explícita en la descripción de la función:

  • Para las funciones que aceptan tipos numéricos, si un operando es de punto flotante y el otro es otro tipo numérico, ambos operandos se convierten en FLOAT64 antes de evaluar la función.
  • Si un operando es NULL, el resultado es NULL, a excepción del operador IS.
  • Para las funciones que son sensibles a la zona horaria (como se indica en la descripción de la función), se utiliza la zona horaria predeterminada (America/Los_Angeles) si no se especifica una.

Prefijo SAFE.

Sintaxis:

SAFE.function_name()

Descripción

Si comienzas una función escalar con el prefijo SAFE., se mostrará NULL en lugar de un error. El prefijo SAFE. solo previene errores de la función con el prefijo en sí: no evita los errores que se producen cuando se evalúan las expresiones de argumento. El prefijo SAFE. solo previene errores que se producen debido al valor de las entradas de función, como los errores “valor fuera de rango”. Aún pueden ocurrir otros errores, como errores internos o del sistema. Si la función no muestra un error, SAFE. no tiene efecto en el resultado. Si la función nunca muestra un error, como RAND, entonces SAFE. no tiene ningún efecto.

Los operadores, como + y =, no admiten el prefijo SAFE.. Para evitar errores de una operación de división, usa SAFE_DIVIDE. Algunos operadores, como IN, ARRAY y UNNEST, se parecen a funciones, pero no admiten el prefijo SAFE.. Las funciones CAST y EXTRACT tampoco admiten el prefijo SAFE.. Para evitar la transmisión de errores, usa SAFE_CAST.

Ejemplo

En el siguiente ejemplo, el primer uso de la función SUBSTR normalmente mostraría un error, porque la función no admite argumentos de longitud con valores negativos. Sin embargo, el prefijo SAFE. hace que la función muestre NULL en su lugar. El segundo uso de la función SUBSTR proporciona el resultado esperado: el prefijo SAFE. no tiene ningún efecto.

SELECT SAFE.SUBSTR('foo', 0, -2) AS safe_output UNION ALL
SELECT SAFE.SUBSTR('bar', 0, 2) AS safe_output;

+-------------+
| safe_output |
+-------------+
| NULL        |
| ba          |
+-------------+