关于oracle中对时间日期进行的一些运算(求日期的差值等)
// 没有区分大小写
select * from hrk_person where EMPLOYE_DATE>to_date('20170615','yyyy-mm-dd hh24:mi:ss')
select * from hrk_person where EMPLOYE_DATE> date '2017-06-15'
//求日期差时要注意日期的格式
1..获取等操作
--获取系统日期
select sysdate from dual;
--获取系统时间
select current_timestamp from dual;
--格式化日期
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
--将字符串转换为日期
select to_date('2019-01-01 21:01:01','yyyy-mm-dd hh24:mi:ss') from dual; --24小时制
select to_date('2019-01-01 01:01:01','yyyy-MM-dd hh:mi:ss') from dual; --12小时制
--在系统时间增加月份
select add_months(sysdate,3) from dual;
--在系统时间增加年份
select add_months(sysdate,3*12) from dual;
--获取日期中该月的最后一天
select last_day(sysdate) from dual;
select last_day(to_date('2014-02-01 23:12:12','yyyy-mm-dd hh24:mi:ss')) from dual;
--获取下个星期二是日期
select next_day(sysdate,3) from dual; --星期日 = 1 星期一 = 2 星期二 = 3 星期三 = 4 星期四 = 5 星期五 = 6 星期六 = 7
--获取日期/时间的单独部分,比如年、月、日、小时、分钟、秒
--ear、month、day、hour、minute、second
select extract(year from sysdate) from dual;
2.计算两个日期之间的时间差(年、月、日、时、分、秒)
--计算两个日期之间相差多少月
select months_between(add_months(sysdate,5),sysdate) from dual;
select months_between(
to_date('2021-12-2 23:45:57','yyyy-mm-dd hh24:mi:ss') ,
to_date('2001-11-2 23:45:57','yyyy-mm-dd hh24:mi:ss')
) as 相差月数
from dual;
--计算两个日期之间相差多少年,就在求月数的基础上除12
--计算两个日期之间相差多少天(要先将字符串转换为日期类型)
select TO_NUMBER(
to_date('2002-12-2 23:45:57','yyyy-mm-dd hh24:mi:ss') - to_date('2001-11-2 23:45:57','yyyy-mm-dd hh24:mi:ss')
) as 相差天数
from dual;
select TO_NUMBER(
to_date(to_char(add_months(sysdate,1),'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') -
to_date(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss')
) as 相差天数
from dual;
--计算两个日期之间相差多少个小时
select TO_NUMBER(to_date('2002-12-2 23:45:57','yyyy-mm-dd hh24:mi:ss') - to_date('2001-11-2 23:45:57','yyyy-mm-dd hh24:mi:ss'))*24
as 相差小时数
from dual;
--相差分钟数就在后面*24*60,秒数在后面*24*60*60
求分钟:
SELECT CEIL((TO_DATE('2016-07-19 10:10:10' , 'YYYY-MM-DD HH24-MI-SS') - TO_DATE('2016-07-19 10:07:50' , 'YYYY-MM-DD HH24-MI-SS')) * 24*60 ) as HOURS FROM DUAL;
执行结果如下
HOURS
3
求小时:
SELECT CEIL((TO_DATE('2016-07-19 15:10:10' , 'YYYY-MM-DD HH24-MI-SS') - TO_DATE('2016-07-19 10:07:50' , 'YYYY-MM-DD HH24-MI-SS')) * 24 ) AS minutesFROM DUAL;
执行结果如下
minutes
6
求秒:
SELECT CEIL((TO_DATE('2016-07-19 10:10:10' , 'YYYY-MM-DD HH24-MI-SS') - TO_DATE('2016-07-19 10:07:50' , 'YYYY-MM-DD HH24-MI-SS')) * 24*60*60 ) as SECOND FROM DUAL;
执行结果如下:
SECOND
140