在SELECT COALESCE(NULL, NULL);
Apache Calcite 上运行时,我收到一个错误消息
ELSE 子句或至少一个 THEN 子句必须为非 NULL
发生这种情况是因为COALESCE
函数被转换为CASE
表达式并且后者被验证是否至少一个THEN
或ELSE
操作数不为空。如果都是NULL
,则抛出错误。这是由源代码中的评论中描述的原因引起的:
根据 sql 标准,我们不能让所有 THEN 语句和 ELSE 返回 null
需要注意的一点是,NULL
当显式转换任何参数时,此查询将返回,例如SELECT COALESCE(CAST(NULL AS VARCHAR), NULL);
.
但是我无法在任何地方找到这个。我所做的发现如下 (参见“应对 null 的缩写”部分,重点是我的):
Coalesce 返回第一个非空参数(如果所有参数都为空,则返回空)。
上面提供的这个声明似乎符合Oracle和PostreSQL文档。
我的问题是,COALESCE
包含文字NULL
s 是否应该仅按照 SQL 标准工作?