1. if 函数
-
同case,nvl,都是处理单个列值的查询结果
-
语法: if(boolean testCondition, T valueTrue, T valueFalseOrNull)
当条件testCondition为True,返回valueTrue;否则返回valueFalseOrNull
例子:
-- if 语句语法,请为 Null 的设置为 0
SELECT if(var IS NULL, 0 ,var) AS var_name
-- 满足一定条件的总数,Null count() 不计数
SELECT count(if(score>=80, score, NULL)) AS good
-- case when 枚举翻译
SELECT page_id AS page_id,
CASE page_id
WHEN 001 THEN '第一名'
WHEN 002 THEN '第二名'
ELSE '-'
END AS name
2. 非空查询函数
2.1. COALESCE(T v1, T v2, …)
- 返回第一个不为 Null 的值;若都为null,则返回null
- 例子
coalesce(a3.salary,0)
2.2. CASE WHEN condition THEN value1 ELSE value2
- 当符合条件时,返回条件value1;否则返回value2
- 例子
SELECT page_id AS page_id,
CASE page_id
WHEN 001 THEN '第一名'
WHEN 002 THEN '第二名'
ELSE '-'
END AS name
2.3. 并列 CASE WHEN
- case 表达式,同java的switch 表达式;符合某个conditionX,则返回对应resultx;若无匹配,则返回ELSE 逻辑reuslt
- 格式
CASE [ expression]
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
WHEN conditionN THEN resultn
ELSE result
END
2.4. case when 嵌套 [较少使用,可用 2.3部分 代替]
- 当满足当前case when condition1,则进入该逻辑,如符合内层 when condition2 ,则返回当前result1,如果符合condition3,则返回 result2;否则返回ELSE 分支result3
- 格式 如果condition匹配到condition2
CASE condition1 WHEN condition2 THEN result1 [WHEN condition3 THEN result2]* [ELSE result3 ] END
3. 判空函数
3.1. nvl(a,b)
- 若a为空,则返回b,否则为a
- 例子
select concat(nvl(cast(a as string), 'na'),nvl(cast(b as string),'na')) from tmp
3.2. nullif(a,b)
- a=b时,返回null,否则为a
- 例子
select concat(nullif(a,'na'),nullif(b,'na')) from tmp