GREATEST 取最大值

GREATEST(n1,n2,…n) 返回序列中的最大值

SELECT GREATEST(15,5,75,8) "Greatest" FROM DUAL;
结果:75

LEAST 取最小值

LEAST(n1,n2…n) 返回序列中的最小值

SELECT LEAST(15,5,75,8) LEAST FROM DUAL;
结果:5

NULLIF 空判断函数

NULLIF(c1,c2) NULLIF 也是个很有意思的函数。逻辑等价于:CASE WHEN c1 = c2 THEN NULL ELSE c1 END

SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL;
结果:a,null

TRANSLATE 高级relace

TRANSLATE是REPLACE所提供的功能的一个超集

select translate('123abcd','2dc','4e') from dual;
结果:143abe	

分析:例子的字符里的2会替换为4,d会替换成e,c对应的位置不存在替换,经常用到指定字符替换为指定字符较多的情况下

COALESCE 空值处理

COALESCE(expression_1, expression_2, …,expression_n)遇到非null值即停止并返回该值,如果所有的表达式都是空值,最终将返回一个空值。

SELECT COALESCE(NULL,1,null,4,5) FROM dual  
结果:1

等价于
CASE
WHEN (expression1 IS NOT NULL) THEN expression1

WHEN (expressionN IS NOT NULL) THEN expressionN
ELSE NULL
解决多次需要case when 判断null的场景

LISTAGG 列转行

LISTAGG() 函数是在oracle 11g 版本中新增的,LISTAGG()是一个实现字符串聚合的oracle内建函数

SELECT LISTAGG(字段1,分隔符) WITHIN GROUP (ORDER BY 字段2) FROM 库名.表名