条件表达式
CASE表达式
语法格式:
CASE expr//用expr和comparison_expr进行比较相等时进行return_expr1处理
WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2 //等于这个的时候怎么处理
......
WHEN comparison_exprn THEN return_exprn
ELSE else_expr] 都不匹配时怎么处理
END
举例:
显示全部雇员的职位,但是职位要求替换为中文显示
CLERK 办事员 SALESMAN 销售 MANAGER 经理
ANALYST 分析员 PRESIDENT 总裁
Select empno,ename,
Case job
When ‘CLERK’ then ‘办事员’
When ‘SALESMAN’ then ‘销售’
......
When ‘ANALYST’ then ‘分析员’
Else ‘总裁’
End
From emp;
Decode函数
语法格式
//当列或表达式的值等于条件1的时候返回结果1
DECODE(col | expression,searsh1,result1,
[,searsh2,result2...,] //同上
[,default]) // default 相等于上面的 else
//DECODE函数和CASE表达式都可以用于IF-THEN-ELSE逻辑判断
举例:
显示全部雇员的职位,但是职位要求替换为中文显示
CLERK 办事员 SALESMAN 销售 MANAGER 经理
ANALYST 分析员 PRESIDENT 总裁
Select empno,ename,job
Dcode(job, ‘CLERK’, ‘办事员’,
‘SALESMAN’, ‘销售’,
......
‘ANALYST’, ‘分析员’,
‘总裁’) from emp;
注意:对于等值判断的时候,decode语法更为简洁,代码量也较少,推荐使用。而对于区间的判断,使用范围条件区分时,用case表达式。
举例:
Select empo,ename,sal,
Case when sal < 2000 then ‘低’
When sal < 5000 then ‘中’
Else ‘高’
End
From emp;
嵌套函数
单行函数是可以嵌套的,嵌套函数的执行顺序由内到外。
需求分析1:距聘用日期三个月后的下一个星期一的日期,格式为2017-01-06
三个月后 add_months(hiredate,3)
下个星期一 next_day(add_months(hiredate,3),’星期一’)
且日期格式为2017-01-06 得到如下:
To_char(next_day(add_months(hiredate,3),’星期一’),’yyyy-mm-dd’)
需求分析2:显示雇员日薪并四舍五入到2位小数的结果,然后对薪资格式以’¥1,182.19’这样的例子形式进行格式化。
雇员日薪并四舍五入到两位小数
Round(sal/30,2)
对薪资格式以’¥1,182.19’这样的例子形式进行格式化。
To_char(round(sal/30,2),’L9,999.99’)