04、Oracle转换函数和条件表达式

本文介绍了Oracle中的数据类型转换,包括隐式和显示转换,详细讲解了TO_CHAR、TO_NUMBER和TO_DATE函数的使用,以及NVL、NVL2和NULLIF等通用函数。此外,还讨论了DECODE和CASEWHENTHENELSEEND条件表达式在处理数据和逻辑判断中的应用。
摘要由CSDN通过智能技术生成

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

识途老码

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值