Oracle转换函数和条件表达式
1.1 【转换函数】
1.1.1 【隐式数据类型转换:后台转换】
COTT@orcl>select * from emp where empno='7788';
隐式转换: 数据类型与默认格式匹配
1.1.2 【显示数据类型转换】
1.1.3 【to_char】
1.1.3.1带有日期的 TO_CHAR
SCOTT@orcl>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss am') from dual;
SCOTT@orcl>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss AM') from dual;
SCOTT@orcl>select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss PM') from dual;
SCOTT@orcl>select to_char(sysdate,'Day,"the" ddth "of" Month,yyyy')from dual;
双引号:格式中字符串不是格式掩码时
SCOTT@orcl>select to_char(sysdate,'FMDAY,"the" ddth "of" Month,yyyy')from dual;
FM :去除开头和结尾的空格(显示紧凑) 都可以用
格式模型:日期格式掩码
官方文档位置:
SQL Language Reference -> 5 Functions -> CTRL+F 搜索 to_char ->
TO_CHAR (datetime) -> Format Models -> Table 3-15 Datetime Format Elements
1.1.3.2带有数字的 TO_CHAR
SCOTT@orcl>select sal,to_char(sal,'$99,999.00') from emp;
注意位数,如果不够长,显示**#**乱码。
SCOTT@orcl>select sal,to_char(sal,'$999') from emp;
1.1.4 【to_number】 字符串转换为数字
SCOTT@orcl>select to_number('$12,345.00','$99,999.00') from dual;
1.1.5 【to_date】 字符串转换为日期
SCOTT@orcl>select * from emp where hiredate>='01-MAY-87';
SCOTT@orcl>select * from emp where hiredate>='1987-05-01';
SCOTT@orcl>select * from emp where hiredate>=to_date('1987-05-01','yyyy-mm-dd');
1.2 【通用函数】
1.2.1 【NVL 函数】
-- 示例
SCOTT@orcl>select ename,sal*12+nvl(comm,0) from emp;
SCOTT@orcl>select ename,mgr,nvl(mgr,'No Manager') from emp;
SCOTT@orcl>select ename,mgr,nvl(to_char(mgr),'No Manger') from emp;
1.2.2 【NVL2 函数】
**NVL2(expr1,expr2,expr3)**如果参数 1 非空 not null,则返回参数 2 的值,否则返回参数 3 的值。
SCOTT@orcl>select ename,sal,comm,sal+nvl(comm,0),nvl2(comm,sal+comm,sal) from emp;
1.2.3 【nullif】
**nullif(expr1,expr2)**比较两个表达式是否相同,如果相同,返回 null,如果不同,返回 expr1。
SCOTT@orcl>select nullif(10,10) from dual;
SCOTT@orcl>select nullif(10,9) from dual;
SCOTT@orcl>select nullif('a','b') from dual;
SCOTT@orcl>select ename,job,length(ename) n1,length(job) n2,nullif(length(ename),leng
th(job)) from emp;
1.3 【条件表达式】
1.3.1 【decode】
需求:工作是 **ANALYST **的,工资涨 10%;
工作是 **CLERK **的,工资涨 15%;
工作是 **MANAGER **的,工资涨 20%;
其他的涨 25%。
SCOTT@orcl>select empno,ename,job,sal,
2 decode(job,'ANALYST', sal*1.1,
3 'CLERK',sal*1.15,
4 'MANAGER',sal*1.20,
5 sal*1.25)
6 new_sal
7 from emp order by job;
**decode **处理空值
SCOTT@orcl>select comm,decode(comm,null,0,comm) from emp;
1.3.2 【case when then else end】
SCOTT@orcl>select empno,ename,sal,job,
2 case job when 'ANALYST' then sal*1.1
3 when 'CLERK' then sal*1.15
4 when 'MANAGER' then sal*1.2
5 else sal*1.25
6 end new_sal
7 from emp order by job;
1.3.2.1【case 第二种形式】
SCOTT@orcl>select empno,ename,sal,job,
2 case when job='ANALYST' then sal*1.1
3 when job='CLERK' then sal*1.15
4 when job='MANAGER' then sal*1.2
5 else sal*1.25
6 end new_sal
7 from emp order by job;