标准 SQL 中的函数调用规则

除非函数说明中另有明确规定,否则以下规则适用于所有函数:

  • 对于接受数字类型的函数,如果一个操作数是浮点型,而另一个操作数是数字型,则先将这两个操作数转换为 FLOAT64,然后再对该函数进行求值。
  • 如果操作数是 NULL,则结果为 NULL,IS 运算符除外。

  • 对于区分时区的函数(如函数说明中所述),如果未指定时区,则使用默认时区“世界协调时间 (UTC)”。

SAFE. 前缀

语法:

SAFE.function_name()

说明

如果一个函数以 SAFE. 前缀开头,则会返回 NULL 而非错误。SAFE. 前缀仅会防止带有前缀的函数本身返回错误,不能防止在计算参数表达式时出现错误。SAFE. 前缀仅会防止因函数输入值而发生的错误,例如“值超出范围”错误,但内部错误或系统错误等其他错误仍可能会发生。如果函数未返回错误,SAFE. 对输出无任何影响。如果函数决不会返回错误,像 RAND 函数就是如此,那么 SAFE. 也没有任何影响。

+=运算符不支持 SAFE. 前缀。为防止除法运算出错,请使用 SAFE_DIVIDE。某些运算符(例如 INARRAYUNNEST)与函数类似,但不支持 SAFE. 前缀。CASTEXTRACT 函数也不支持 SAFE. 前缀。为防止类型转换出错,请使用 SAFE_CAST

示例

在以下示例中,SUBSTR 函数的第一处使用正常应该返回错误,因为该函数不支持值为负的长度参数。但是,该函数带有 SAFE. 前缀,因此返回 NULLSUBSTR 函数的第二处使用提供了预期输出:SAFE. 前缀无任何影响。

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

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

支持的函数

BigQuery 支持对大多数可能引发错误的标量函数使用 SAFE. 前缀,此类函数包括 STRING 函数数学函数DATE 函数DATETIME 函数TIMESTAMP 函数。BigQuery 不支持对聚合函数分析函数用户定义的函数使用 SAFE. 前缀。

调用永久性用户定义函数 (UDF)

创建永久性 UDF 后,您可以像调用任何其他函数一样调用该函数,在它前面附加数据集名称(它在该数据集中被定义为前缀)。

语法

[`project_name`].dataset_name.function_name([parameter_value[, ...]])

要在除用于运行查询的项目之外的项目中调用 UDF,需要使用 project_name

示例

以下示例创建名为 multiply_by_three 的 UDF,并从同一项目中调用它。

CREATE FUNCTION my_dataset.multiply_by_three(x INT64) AS (x * 3);

SELECT my_dataset.multiply_by_three(5) AS result; -- returns 15

以下示例从其他项目中调用永久性 UDF。


CREATE `other_project`.other_dataset.other_function(x INT64, y INT64)
  AS (x * y * 2);

SELECT `other_project`.other_dataset.other_function(3, 4); --returns 24
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面