SQL 方言通

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

COALESCE 取第一个非空值

COALESCE 从左到右返回第一个非 NULL 的参数,全部为 NULL 时返回 NULL。七个引擎都同名可用,差异主要在参数类型要求,以及 MaxCompute 在全部参数为 NULL 常量时会报错。

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

各引擎写法

引擎支持写法说明依据
MaxCompute支持COALESCE(expr1, expr2, ...)遇到第一个非 NULL 值就返回,后续参数不再计算。返回类型与参数类型相同。不读表、且参数全部为 NULL 时报错;读表时返回 NULL。官方文档
Hologres支持COALESCE(expr1, expr2, ...)所有表达式为 NULL 时返回 NULL。官方文档
StarRocks支持coalesce(expr1, ...)参数类型必须兼容,返回类型与 expr1 相同。官方文档
Doris支持COALESCE(expr[, ...])参数类型必须兼容。官方文档
Hive支持COALESCE(v1, v2, ...)参数类型为同一类型 T,返回类型也是 T。官方文档
Spark SQL支持coalesce(expr1, expr2, ...)Spark 1.0.0 起提供。官方文档
Flink SQL支持COALESCE(value1 [, value2]*)返回类型是所有参数的公共类型。所有参数都可为空时,结果也可为空。官方文档

迁移注意事项

示例

渠道为空时依次取备用字段,最后兜底为 unknown

MaxCompute
SELECT COALESCE(channel, sub_channel, 'unknown') FROM orders;
StarRocks
SELECT coalesce(channel, sub_channel, 'unknown') FROM orders;
Flink SQL
SELECT COALESCE(channel, sub_channel, 'unknown') FROM orders;

同类函数

最后核对日期: