Oracle中的日期運算
阿新 • • 發佈:2019-02-11
**
一、加減日、月、年
**
在Oracle中,date型別可以直接到加減天數,而加減月份需要使用add_months函式
示例:
SQL> select sysdate as sys_date,---------系統日期
2 sysdate - 2 as "date-2-days",--------減兩天
3 sysdate + 2 as "date+2-days",--------加兩天
4 add_months(sysdate,-2) as "date-2-months",-------------減兩個月
5 add_months(sysdate,+2 ) as "date+2-months",-------------加兩個月
6 add_months(sysdate,-2*12) as "date-2-years",-----------減兩年
7 add_months(sysdate,+2*12) as "date+2-years"------------加兩年
8 from dual;
SYS_DATE date-2-da date+2-da date-2-mo date+2-mo date-2-ye date+2-ye
--------- --------- --------- --------- --------- --------- ---------
02-OCT-17 30-SEP-17 04-OCT-17 02-AUG-17 02-DEC-17 02-OCT-15 02-OCT-19
SQL>
注意:在Oracle中,如果別名有特殊字元,一定要使用雙引號引起來,不然會提示錯誤
**
加減時、分、秒
**
上面的示例中可以看到,date可以直接加減天數,那麼1/24就是一小時,分鐘與秒的加減類似
由於我的資料庫字符集不支援中文,所以在這裡,我使用PL/SQLdeveloper來做示例:
SQL> select sysdate as 系統日期,
2 sysdate - 2/24/60/60 as 減2秒,
3 sysdate + 2 /24/60/60 as 加2秒,
4 sysdate - 2/24/60 as 減兩分,
5 sysdate + 2/24/60 as 加2分,
6 sysdate - 2/24 as 減2小時,
7 sysdate + 2/24 as 加2小時
8 from dual;
系統日期 減2秒 加2秒 減兩分 加2分 減2小時 加2小時
-------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
2017/9/19 23:06:13 2017/9/19 23:06:11 2017/9/19 23:06:15 2017/9/19 23:04:13 2017/9/19 23:08:13 2017/9/19 21:06:13 2017/9/20 1:06:13
**
日期間隔之時、分、秒
**
兩個日期相減,得到的就是天數,乘以24小時,就是小時,以此類推,得到的就是秒
示例:
SQL> select gap_time,
2 gap_time * 24 as gap_hours,
3 gap_time * 24 * 60 as gap_min,
4 gap_time * 24 * 60 * 60 as gap_sed
5 from
6 (select sysdate - max(hiredate) as gap_time
7 from scott.emp);
GAP_TIME GAP_HOURS GAP_MIN GAP_SED
---------- ---------- ---------- ----------
11078.0304 265872.729 15952363.7 957141825
SQL>
間隔日、月、年
加減月份使用add_months函式,而計算月份間隔則需要使用months_between函式
示例:計算emp表中僱傭時間最長的員工到現在間隔的天數、月數和年數
SQL> select sysdate-min_hd as gap_days,
2 months_between(sysdate,min_hd) as gap_months,
3 months_between(sysdate,min_hd) / 12 as gap_years
4 from
5 (select sysdate,min(hiredate) as min_hd from scott.emp);
GAP_DAYS GAP_MONTHS GAP_YEARS
---------- ---------- ----------
13426.0349 441.0979 36.7581583
SQL>
以上就是關於時間的基本運算。