oracle系統函數(日期函數)
調用日期函數時,首先要明確兩個概念,時間戳和日期是不同的,日期中包括年月日但不包括小時分鍾秒,時間戳包括年月日小時分鍾秒。在oracle中,一般情況下,函數中包含date字符的和日期有關,包含timestamp的函數和時間戳有關(時間戳可以理解為時間)。oracle中,日期一般以天為基本單位,時間相減時結果單位為天,時間與數字相加時,默認加對應數字的天數。
一、調用時無參無括號時間函數
1.返回系統當前日期sysdate
--該函數返回值沒有時間戳
select sysdate from dual;
2.返回會話中的日期和時間localtimestamp
--不包括時區
select localtimestamp from dual;
3.返回會話時區中的當前日期和時間current_timestamp
--包括時區
select current_timestamp from dual;
4.返回當前會話時區中的當前日期current_date
select current_date from dual;
5.返回數據庫時區設置dbtimezone
select dbtimezone from dual;
6.返回當前會話時區sessiontimezone
select sessiontimezone from dual;
7.變動日期時間數值interval
--設置數值代表秒,分,小時,天,月,年
例如:
interval '1' second 1秒
interval '1' minute 1分
interval '1' hour 1小時
interval '1' day 1天(系統默認)
interval '1' month 1月
interval '1' year 1年
select trunc(sysdate)+(interval '1' second),--加1s trunc(sysdate)+(interval '1' hour),--加1個小時 trunc(sysdate)+(interval '1' day),--加1天 trunc(sysdate)+1--加1天 from dual;
二、調用時有括號的日期函數
1.返回指定月數后的日期add_months()
select add_months(sysdate,3) from dual;
等價於
select trunc(sysdate)+interval '3' month from dual;
2.返回本月最后一天的日期last_day()
select last_day(sysdate) from dual;
返回本月第一天
select trunc(sysdate,'month') from dual;
3.返回2個日期間隔月數month_between()
select months_between(sysdate,to_date('2015-09-01','YYYY-MM-DD')) from dual;
4.四舍五入后的期間第一天round()
select sysdate, round(sysdate),--最近0點日期 round(sysdate,'day'),--最近星期日 round(sysdate,'month'),--最近月初 round(sysdate,'q'),--最近季出日期 round(sysdate,'year')--最近年初日期 from dual;
5.返回日期所在期間的第一天trunc()
select trunc(sysdate),--今天日期 trunc(sysdate,'day'),--本周星期日,等價於trunc(sysdate,'D')和trunc(sysdate,'d') trunc(sysdate,'month'),--本月初,若trunc(sysdate,'M')和trunc(sysdate,'m')則執行出錯 trunc(sysdate,'q'),--本季初日期 trunc(sysdate,'year')--本年初日期,等價於trunc(sysdate,'Y')和trunc(sysdate,'y') from dual;
6.返回下周某一天的日期next_day(),可以返回下周的周一到周日
select sysdate, next_day(sysdate,'星期一'),--返回下周星期一 next_day(sysdate,'星期二')--返回下周星期二 from dual;
7.提取時間日期中數據extract()
--提取小時,分鍾,秒時需要加上timestamp
select extract(minute from timestamp '2015-2-16 2:38:40'),--timestamp時間戳 extract(hour from timestamp '2015-2-16 2:38:40'), --extract(hour from timestamp(sysdate)),錯誤 extract(hour from localtimestamp),--返回值錯誤 extract(hour from current_timestamp), extract(day from sysdate),--日 extract(month from sysdate), extract(year from sysdate) from dual;
總結:關於日期的函數還是挺多的,但是常用的一般為sysdate,localtimestramp,trunc,interval和extract,重點掌握這些應該足夠了,其他不常用的可以用的時候再查找。