⌘+k ctrl+k
1.3 (稳定版)
搜索快捷键 cmd + k | ctrl + k
TRY 表达式

TRY 表达式确保由子(标量)表达式中输入行引起的错误会导致这些行返回 NULL,而不是导致查询抛出错误。

TRY 表达式的灵感来源于 TRY_CAST 表达式

示例

以下调用在不使用 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 不能与易失性函数或 标量子查询 结合使用。例如

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