一、日期计算
1、日期+number=number天以后
日期-number=number天以前
日期1-日期2=两个日期之间相差的天数
2、Oracle取系统时间sysdate
select sysdate from dual;--取当前的数据库时间
select sysdate+10 from dual;--当前系统时间后十天的时间
select ename,sysdate-hiredate hiredate from emp;--计算出一个的在职时间
select ename,round(sysdate-hiredate,0) hiredate from emp;--将在职时间进行四舍五入
二、日期格式
yyyy:用数字表达的四位年(2016年)
mm:用数字表达的二位月(01月)
dd:用数字表达的二位日(01日)
hh24:用数字表达的24小时制的小时(20点)
hh12:用数字表示的12小时制的小时(11点)
mi:用数字表达的分钟(30分)
ss:用数字表达的秒(30秒)
d:用数字表达的一周内的第几天(周日:1)
day:用全拼表达的星期几(英文:sunday,中文:星期日)
month:用全拼表达的月份(March)
select to_char (sysdate,'year month dd day d hh12 am') from dual;
select to_char(sysdate,'yyyy"年"mm"月"dd"日") from dual;
select sysdate from dual;--默认日期格式是:DD-Mon-RR
1.RR和YY的区别:
RR YY(直接取当前日期的前两位作为世纪)
05年 2005 2005
99年 1999 2099
三、日期函数
1.months_between(date1,date2);--date1,date2的时间间隔多少月
select ename,months_between(sysdate,hiredate) hiredate from emp;
2.add_months(date,num);--时间date+num个月,num可有负,代表num个月之前的这一天
select add_months(sysdate,6) from dual;
3.next_day(sysdate,num);--下周的周num
select next_day(syadate,5) from dual;--下周四
select next_day(sysdate,'THR') from dual;--下周四
英文环境下使用‘THR’,中文环境下使用‘星期四’,数字通用
last_day(date);--date所在月的最后一天
select last_day(syadate) from dual;
四、转换函数
to_char/to_date/to_number
1.to_number将字符串转换成数值
语法:to_number('字符串','格式')
select to_number('12')*12 from dual;--144
select to_number('$12,345.67','$99,999.99') from dual;--12345.67
select to_number('$12,345.67','$99,999.99') *0.1 from dual;--1234.567
2.to_char将数值或日期转换成字符串
语法:to_char(number,'fmt')
格式说明:
9代表数字位
0定义宽度大于实际值宽度时,0会被强制显示在前面,以补齐位数
$美元的货币符号
L本地货币符号
.小数点
,每千位显示一个,
如果显示位数不足(定义宽度小于实际值宽度),用#代替
select to_char(12345,'$99,999.00') from dual;
select to_char(sysdate, 'yyyy/mm/dd day am') from dual;--2016/06/15 Wednesday am
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;--2016-06-15 09:59:45
3.to_date将字符变成日期
语法:to_date(char,'fmt')
select to_date('2010-10-10','yyyy-mm-dd') from dual;--2010-OCT-10
insert into emp(empno,ename,hiredate)
values(1234,'zhangsan',
to_date('2011-02-14','yyyy-mm-dd'));
五、通用函数
nvl/coalesce/decode
nvl:空值处理函数
nvl(comm,0);--如果comm为空,则显示0
nvl(hiredate,'01-09-10');--如果hiredate为null,则显示01-09-10
nvl(job,'No job Yet');--如果job为空,则显示No job Yet
select ename,sal,comm.nvl(comm,100) bonus from emp;
select ename,nvl(hiredate,
to_date('2016-02-01','yyyy-mm-dd')) hiredate
from emp;
coalesce:返回第一个非空表达式
coalesce(comm,salary,100)
select ename,sal,comm,coalesce(comm,sal,100) bonus from emp;
decode:分支函数
decode(job,'SALESMAN',1.10*sal,'ANALYST',1.15*sal,'MANAGER',1.20*sal,sal)
selsct ename,job,sal,
decode(job,'SALESMAN',1.10*sal,
'ANALYST',1.15*sal,
'MANAGER',1.20*sal,
sal) bonus
from emp;
转载请注明出处