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的倍数') );
CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END 形式
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 形式
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 具备更佳的可读性,特别是在处理复杂条件判断的时候
isnull( a ) 和 isnotnull ( a )
isnull( a )
isnotnull ( a )
如果 a 是 NULL 则返回 true ,否则返回 false
后者相反
与这个 ”运算符“ 类似:A IS [NOT] NULL
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);
in
select 'a' in('a', 'b', 'c'), 'd' in('a', 'b', 'c');