length()
查询字段值的长度
select length(ename) from emp
nvl()
提问,员工姓名,工资,奖金,工资与奖金的和
select ename,sal,comm,sal+comm from emp
注意:查询结果中,当comm为null时,sal+comm也为null,这显然不是我们想要的结果,要用到nvl()函数
语法
NVL(expr1,expr2)
如果 第一个参数为null,那么 显示第二个参数,如果第一个参数的值 不为null,则显示第一个参数。
例子
select nvl(comm,0) from emp;
上题的正确答案
select ename,sal,nvl(comm,0),sal+nvl(comm,0) from emp
case表达式(效率高)
语法
case 列 when 值 then 翻译值 else 未匹配的值 end
例子
对emp表的job字段值进行翻译,当值为”CLERK”时显示”职员”,当值为”SALESMAN”时显示”销售”,当值为”MANAGER”时显示”经理”,当值为”ANALYST”时显示”分析员”,当值为”PRESIDENT”时显示”董事长”
select empno, ename, sal, case job when 'CLERK' then '职员' when 'SALESMAN' then '销售' when 'MANAGER' then '经理' when 'ANALYST' then '分析员' when 'PRESIDENT' then '董事长' else '未知职务' end 职务 from emp;
DECODE()(效率低)
语法
decode(列,值,翻译值)
和case 表达式类似,decode() 函数也用于实现多路分支结构
例子
对emp表的deptno字段值进行翻译,当值为“10”时显示“财务部”,当值为“20”时显示“研发部”,当值为“30”时显示“销售部”,如果没有匹配就显示“未知部门”
select empno, ename, sal,decode(deptno,10,'财务部',20,'研发部',30,'销售部','未知部门') 部门 from emp;
日期函数
语法
months_between(m,n)
日期m和n相差的月数 rrrr
sysdate系统的当前时间
- 查询雇佣日期,和雇佣日期距离现在间隔多少个月
select months_between(sysdate,hiredate) from emp; - 查询雇佣日期,和雇佣日期距离现在间隔多少年
select hiredate, months_between(sysdate,hiredate)/12 from emp;
练习
找出姓名为5个字母的员工
找出姓名大于3个字母的员工信息
查询员工信息,结果为:您好【员工姓名】,您本月的工资为【工资金额】,您本月的奖金为【奖金金额】,合计为【工资+奖金】