条件函数


IF 函数

  • if(boolean testCondition, T valueTrue, T valueFalseOrNull)

    • 若 testCondition 为真,返回 valueTrue ,否则返回 valueFalseOrNull

    • select if (1 > 2, '大', '小'), if ('lily collins' = 'pretty', 'no', 'yes');
      select
          if (
              8 % 2 = 0,
              if (8 % 3 = 0, '即是偶数,又是 3 的倍数','虽然是偶数,但不是3的倍数'),
              if (8 % 3 = 0, '虽然不是偶数,但是3的倍数','既不是偶数,也不是3的倍数')
          );
      
    • 032


CASE… WHEN… 函数

  • CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END 形式

    • with tmp as(
          select -1 as input
      )
      select
          case input
              when -1 then '负一'
              when 0 then '零'
              when 1 then '正一'
              else '输入错误'
          end
      from tmp;
      
  • CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END 形式

    • with tmp as(
          select 83 as score
      )
      select
          case
              when score >= 0 and score < 60 then '不及格'
              when score >= 60 and score < 70 then '及格'
              when score >= 70 and score < 80 then '良好'
              when score >= 80 and score < 90 then '优秀'
              when score >= 90 and score <= 100 then '特优'
              else '输入错误'
          end
      from tmp;
      

CASE WHEN 相比 IF 具备更佳的可读性,特别是在处理复杂条件判断的时候

033


NULL 相关

  • isnull( a )isnotnull ( a )

    • 如果 a 是 NULL 则返回 true ,否则返回 false

    • 后者相反

    • 与这个 ”运算符“ 类似:A IS [NOT] NULL

    • with tmp as(
          select 'A' as c1, NULL as c2
      )
      select
          isnull(c1), isnull(c2), isnotnull(c1), isnotnull(c2), 
          c1 IS NULL, c2 IS NULL, c1 IS NOT NULL, c2 IS NOT NULL
      from tmp;
      
  • nvl(T value, T default_value)

    • 如果 value 是 NULL ,则返回 default_value ,否则返回 value

    • 常用,使用 0 代替 NULL ,避免 NULL 参与运算返回 NULL

    • with tmp as(
          select 30 as c1, NULL as c2
      )
      select
          nvl(c1,0), nvl(c2,0)
      from tmp;
      
  • COALESCE(T v1, T v2, ...)

    • 返回参数中的第一个非空值;如果所有值都为 NULL ,那么返回 NULL

    • select coalesce(NULL, 1, 2), coalesce(NULL, NULL);
      
  • nullif( a, b )

    • 如果 a = b ,返回 NULL ,否则返回 a

    • SELECT nullif("b", "b"), nullif("b", "a"), nullif("a", "b");
      
  • assert_true(boolean condition)

    • 如果 condition 成立,返回 NULL ;如果不成立,抛出错误

    • select assert_true (2>1);
      select assert_true (2<1);
      

034


in 函数

select
    'a' in('a', 'b', 'c'),
    'd' in('a', 'b', 'c');

034a