SQL 方言通

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

条件、空值和类型转换函数对照

条件、空值和类型转换函数在 MaxCompute、Hologres、StarRocks、Doris、Hive、Spark SQL、Flink SQL 中的写法对照,共 5 个函数。其中 2 个函数在部分引擎中需要改写或没有对应函数。

目录:coalesce · decode · greatest · if · nvl

COALESCE 取第一个非空值

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

引擎支持写法
MaxCompute支持COALESCE(expr1, expr2, ...)
Hologres支持COALESCE(expr1, expr2, ...)
StarRocks支持coalesce(expr1, ...)
Doris支持COALESCE(expr[, ...])
Hive支持COALESCE(v1, v2, ...)
Spark SQL支持coalesce(expr1, expr2, ...)
Flink SQL支持COALESCE(value1 [, value2]*)

DECODE 多值匹配

DECODE(expr, search1, result1, ..., default) 按值匹配返回结果,相当于简单的 CASE 表达式。MaxCompute 和 Spark 3.2 起支持这种写法;Hive 和 Flink 的 DECODE 是按字符集解码二进制,含义完全不同;其他引擎要改写为 CASE。

引擎支持写法
MaxCompute支持DECODE(expression, search, result[, search, result]...[, default])
Hologres需改写CASE expr WHEN search THEN result ... ELSE default END
StarRocks需改写CASE expr WHEN search THEN result ... ELSE default END
Doris需改写CASE expr WHEN search THEN result ... ELSE default END
Hive需改写CASE expr WHEN search THEN result ... ELSE default END
Spark SQL支持decode(expr, search, result [, search, result ] ... [, default])
Flink SQL需改写CASE expr WHEN search THEN result ... ELSE default END

GREATEST 多值取最大

GREATEST 返回参数中的最大值。差异主要在 NULL:StarRocks、Doris、Hive 2.0 起和 Flink 只要有一个参数为 NULL 就返回 NULL;MaxCompute 默认和 Spark 会跳过 NULL。同样的 SQL 迁移后可能从有值变成 NULL。LEAST 的规则相同。

引擎支持写法
MaxCompute支持GREATEST(var1, var2[, ...])
Hologres支持GREATEST(value1, value2, ...)
StarRocks支持GREATEST(expr1, ...)
Doris支持GREATEST(expr[, ...])
Hive支持greatest(T v1, T v2, ...)
Spark SQL支持greatest(expr, ...)
Flink SQL支持GREATEST(value1[, value2]*)

IF 条件判断

IF 在条件为真时返回第二个参数,否则返回第三个参数。七个引擎大多支持 IF,Hologres 需要 V2.1 及以上版本。

引擎支持写法
MaxCompute支持IF(testCondition, valueTrue, valueFalseOrNull)
Hologres支持IF(condition, value_if_true, value_if_false)
StarRocks支持if(expr1, expr2, expr3)
Doris支持IF(condition, value_true, value_false_or_null)
Hive支持if(testCondition, valueTrue, valueFalseOrNull)
Spark SQL支持if(expr1, expr2, expr3)
Flink SQL支持IF(condition, true_value, false_value)

NVL 空值替换

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

引擎支持写法
MaxCompute支持NVL(value, default_value)
Hologres需改写COALESCE(value, default_value)
StarRocks需改写IFNULL(expr1, expr2)
Doris支持NVL(expr1, expr2)
Hive支持NVL(value, default_value)
Spark SQL支持nvl(expr1, expr2)
Flink SQL需改写IFNULL(input, null_replacement)

其他分类

最近核对: