跳到主要内容

TRY 表达式

TRY 表达式可确保:当子(标量)表达式因输入行导致错误时,这些行会返回 NULL,而不是让整个查询抛出错误。

TRY 表达式的设计灵感来自 TRY_CAST expression

示例

以下调用在不使用 TRY 表达式时会返回错误。 将它们包裹在 TRY 表达式中后,会返回 NULL

类型转换

不使用 TRY

SELECT 'abc'::INTEGER;
Conversion Error:
Could not convert string 'abc' to INT32

使用 TRY

SELECT TRY('abc'::INTEGER);
NULL

对零取对数

不使用 TRY

SELECT ln(0);
Out of Range Error:
cannot take logarithm of zero

使用 TRY

SELECT TRY(ln(0));
NULL

多行类型转换

不使用 TRY

WITH cte AS (FROM (VALUES ('123'), ('test'), ('235')) t(a))
SELECT a::INTEGER AS x FROM cte;
Conversion Error:
Could not convert string 'test' to INT32

使用 TRY

WITH cte AS (FROM (VALUES ('123'), ('test'), ('235')) t(a))
SELECT TRY(a::INTEGER) AS x FROM cte;
x
123
NULL
235

限制

TRY 不能与易变函数(volatile function)或标量子查询一起使用。 例如:

SELECT TRY(random())
Binder Error:
TRY can not be used in combination with a volatile function