日期无非 字串和日期类型,以及时间戳(数字):
1.日期和字符串转换函数(to_date,to_char)
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; //日期→字符串
+ 2018-02-03 11:43:22
select to_date('2017-05-02 11:11:44','yyyy-mm-dd hh24:mi:ss') from dual //串→日期
+ 2017/5/2 11:11:44
2.trunc[截断到最接近的日期,单位为天] ,返回的是日期类型
select sysdate S1,
trunc(sysdate) S2, //返回当前日期,无时分秒
trunc(sysdate,'year') YEAR, //返回今年的1月1日,无时分秒
trunc(sysdate,'month') MONTH , //返回当前月的1日,无时分秒
trunc(sysdate,'day') DAY //返回当前星期的星期天,无时分秒
from dual
+ 2018/2/3 11:50:20 , 2018/2/3 , 2018/1/1,2018/2/1 ,2018/1/28
3.计算时间差
注:oracle时间差是以天数为单位,所以换算成年月日
两个日期间的天数 差
select floor(sysdate - to_date('20170405','yyyymmdd')) from dual;
+ 304
select trunc(sysdate) - 1 from dual //时间差-天
+ 2018/2/2
select floor( to_number( sysdate - to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss') )/365) from dual //时间差- 年
select ceil( moths_between ( sysdate-to_date ( '2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss' ) ) ) from dual //时间差- 月
select floor( to_number( sysdate - to_date('2017-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss') )) from dual //时间差- 天
+ 92
select to_number( sysdate - to_date('2017-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss') ) from dual //时间差-天
+ 92.8721412037037
select sysdate - to_date('2017-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss') from dual //时间差-天
+ 92.872662037037
select trunc(sysdate) - to_date('2017-11-02','yyyy-mm-dd') from dual //时间差-天
+ 93
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) from dual //时间差- 时
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) from dual //时间差- 分
select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) from dual //时间差- 秒