数仓 SQL 函数对照

首页 / 条件、空值和类型转换

NVL 空值替换

NVL 在第一个参数为 NULL 时返回第二个参数。MaxCompute、Doris、Hive 和 Spark 可以直接使用,Hologres、StarRocks 和 Flink SQL 需要改写为 COALESCE 或 IFNULL。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute 支持 NVL(value, default_value) 文档要求两个参数的数据类型一致。 官方文档
Hologres 需改写 COALESCE(value, default_value) 条件函数文档中没有 NVL,只有 COALESCE、IF、NULLIF 等,需要改写为 COALESCE。 官方文档
StarRocks 需改写 IFNULL(expr1, expr2) 条件函数列表中没有 NVL,只有 case、coalesce、if、ifnull 和 nullif。IFNULL 的结果类型与 expr1 一致。 官方文档
Doris 支持 NVL(expr1, expr2) NVL 是 IFNULL 的别名。expr1 不为 NULL 时返回 expr1,否则返回 expr2。 官方文档
Hive 支持 NVL(value, default_value) Hive 0.11 起提供。 官方文档
Spark SQL 支持 nvl(expr1, expr2) Spark 2.0.0 起提供,同时有 ifnull、nvl2 和 coalesce。 官方文档
Flink SQL 需改写 IFNULL(input, null_replacement) 没有 NVL,可以用 IFNULL 或 COALESCE。 官方文档

迁移注意事项

示例

折扣为空时按 0 计算

MaxCompute
SELECT NVL(discount, 0) AS discount FROM orders;
Hologres
SELECT COALESCE(discount, 0) AS discount FROM orders;
StarRocks
SELECT IFNULL(discount, 0) AS discount FROM orders;
Flink SQL
SELECT IFNULL(discount, 0) AS discount FROM orders;

同类函数

最后核对日期: