Oracle的時間計算


1.時間的變化

(1)時間的變化

select sysdate "當前時間",sysdate+1 "加一天",
sysdate+1/24 "加一時",
sysdate+1/24/60 "加一分",
sysdate+1/24/60/60 "加一秒" from dual

輸出結果:
輸出結果
不過此種方法不能做月的加減,因為每月的天數不一樣

(2)日期的變化

select sysdate "當前時間",add_months(sysdate,1) "加一個月",
add_months(sysdate,1*12) "加一年" from dual;

輸出結果:

(3)使用numtoyminterval、numtodsinterval函數:

numtoyminterval:num to Y M interval;
numtodsinterval:num to D S interval
第三種函數功能還是比較強大的,但是拼寫字母太多,用的比較少,畢竟前兩種已經夠用了。

select sysdate,sysdate + numtodsinterval(1,'second') "加一秒",
sysdate + numtodsinterval(1,'minute') "加一分",
sysdate + numtodsinterval(1,'hour') "加一小時",
sysdate + numtodsinterval(1,'day') "加一天",
sysdate + numtoyminterval(1,'month') "加一個月",
sysdate + numtoyminterval(1,'year') "加一年" from dual;

輸出結果:

2. 獲取兩個時間的天數差

備注:當前時間是2019/7/8 10:23:49

select sysdate,sysdate - to_date('20190701','yyyymmdd') from dual;

輸出:2019/7/8 10:23:49 | 7.43320601851852

select floor(sysdate - to_date('20190701','yyyymmdd')) from dual;--floor:向下取整

輸出:7

select ceil(sysdate - to_date('20190701','yyyymmdd')) from dual;--ceil:向上取整

輸出:8

select round(sysdate - to_date('20190701','yyyymmdd')) from dual;--round:四舍五入

輸出:7

3. 計算兩個時間的月份差

select months_between(to_date('20190708 111111','yyyy-mm-dd hh24:mi:ss'), to_date('20180708 233333','yyyy-mm-dd hh24:mi:ss')) from dual;

輸出:12

select months_between(to_date('20190708','yyyy-mm-dd'),to_date('20180709','yyyy-mm-dd')) from dual;

輸出:11.9677419354839

4.兩個時間段的交集

(1) 獲取有交集的記錄1:

select * from oa_leave where end_time>=to_date('20190701','yyyymmdd') and start_time<=to_date('20190705','yyyymmdd');

(2) 獲取有交集的記錄2:

select * from oa_leave where (start_time,end_time) overlaps (to_date('20190701','yyyymmdd')-0.00001,to_date('20190705','yyyymmdd')+0.00001)--注:overlaps是開區間,一般使用方法1

輸出結果:
輸出結果

(3) 求兩個時間段的交集部分

select greatest(start_time,to_date('20190701','yyyymmdd')),least(end_time,to_date('20190705','yyyymmdd')) from oa_leave
 where end_time>=to_date('20190701','yyyymmdd') and start_time<=to_date('20190705','yyyymmdd')

輸出結果:
輸出結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM