空值运算

通常来说,如果函数或运算符的其中一个参数是空值,结果也会是空值。

x = 1.0 + 5.6 * 3 + NULL + 3
isNull(x)
// output: 1

typestr x;
// output: DOUBLE

但存在如下特殊情况:

  • 在比较运算符 >, >=, <, <=, between 中,默认情况下(nullAsMinValueForComparison=true),空值表示最小值。当设置参数 nullAsMinValueForComparison=false 时,比较的最终结果是空值。

    // nullAsMinValueForComparison = true
    1 < NULL // output: false
    1 > NULL // output: true
    NULL == NULL // output: true
    NULL != NULL // output: false
    
    // nullAsMinValueForComparison = false
    1 < NULL // output: 00b
    1 > NULL // output: 00b
    NULL == NULL // output: true
    NULL != NULL // output: false
  • 在比较运算符 !=, <>, == 中,空值表示最小值,且两个空值被认为是相等的。

    NULL == NULL // output: true
    NULL != NULL // output: false
  • or 函数中,默认情况下(logicOrIgnoreNull=true),如果只有一个操作数为空,结果等于另一个非空操作数。若两个操作数均为空,则返回空值。当设置 logicOrIgnoreNull= false 时,若有一个操作数为空,结果将返回空值。

    // logicOrIgnoreNull = true
    NULL or true // output: true
    NULL or false // output: false
    NULL or NULL // output: 00b
    
    // logicOrIgnoreNull = false
    
    NULL or true // output: 00b
    NULL or false // output: 00b
    NULL or NULL // output: 00b
  • 聚合函数(如 sum/avg/med 等) 中的空值会被忽略。

    x = 1 2 NULL NULL 3;
    sum(x)
    // output: 6
    
    avg(x)
    // output: 2
    
  • 向量中的元素进行排序时,空值表示最小值。

  • ols, olsEx 函数中,参数中的空值会被替换为 0。