1. 程式人生 > >Oracle中的日期運算

Oracle中的日期運算

**

一、加減日、月、年

**
在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 as2秒,
  3  sysdate + 2
/24/60/60 as2秒, 4 sysdate - 2/24/60 as 減兩分, 5 sysdate + 2/24/60 as2分, 6 sysdate - 2/24 as2小時, 7 sysdate + 2/24 as2小時 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> 

以上就是關於時間的基本運算。