Oracle日期函數全解

1. 分別取出當前日期的年月日,時分秒
select to_number(to_char(sysdate,'yyyy')) 年 from dual; --2011
select to_number(to_char(sysdate,'mm')) 月 from dual; --5
select to_number(to_char(sysdate,'dd')) 日 from dual; --24
select to_number(to_char(sysdate,'HH24')) 時 from dual; --17
select to_number(to_char(sysdate,'MI')) 分 from dual; --4
select to_number(to_char(sysdate,'SS')) 秒 from dual; --22 數據庫

Y或YY或YYY或YYYY 分別表示 年的最後一位,兩位或三位,四位, 不要將MM格式用於分鐘(分鐘應該使用MI)。MM是用於月份的格式
MM 月份數:
--D 一週內第幾天:
Select to_char(sysdate,'D') from dual;--3(週日算第一天)
--DD 當月第幾天:
Select to_char(sysdate,'DD') from dual;--24
--DDD 當年第幾天:
Select to_char(sysdate,'DDD') from dual; --144 session

--DY 一週內星期幾:
Select to_char(sysdate,'DY') from dual; --星期二
--Day  同DY
select to_char(sysdate, 'Day')  from dual; --星期二 oracle

--Mon 月份的簡寫  
Select to_char(sysdate,'Mon') from dual; -- 5月
--Month 月份數:
Select to_char(sysdate,'Month') from dual; -- 5月
--MM 月份的數字
Select to_char(sysdate,'MM') from dual; -- 05 函數

--W 本月第幾周:
Select to_char(sysdate,'W') from dual;--4
--WW,IW 當年第幾周:
Select to_char(sysdate,'WW') from dual;--21
Select to_char(sysdate,'IW') from dual;--21 io

--IYYY,YYYY 四位的年份
select to_char(sysdate,'IYYY') from dual;
select to_char(sysdate,'YYYY') from dual; ast

--HH或HH24 24進制小時數:
select to_char(sysdate,'HH') from dual; --05
Select to_char(sysdate,'HH24') from dual; –17 date

--MI 分鐘數(0~59):
select to_char(sysdate,'MI') from dual; --18
--SS 秒數(0~59):
select to_char(sysdate,'SS') from dual; --02 select


2. oracle中時間運算
內容以下: 一、oracle支持對日期進行運算 二、日期運算時是以天爲單位進行的 三、當須要以分秒等更小的單位算值時,按時間進制進行轉換便可 四、進行時間進制轉換時注意加括號,不然會出問題 im

select (sysdate-1) from dual; --源時間減1天
select (sysdate-1-1/24) from dual; --源時間減1天1小時
select (sysdate-1-1/24-1/(24*60)) from dual;   --源時間減1天1小時1分
select (sysdate-1-1/24-1/(24*60)-1/(24*60*60)) from dual;  --源時間減1天1小時1分1秒 統計

3,查詢系統當前時間
select sysdate from dual;

4.查詢本月最後一天的日期
select last_day(sysdate) from dual;

5.某個日期往前或後退幾個月後的日期
select add_months(sysdate,-2) from dual;  --向前退兩個月
select add_months(sysdate,2) from dual; --向後退兩個月

6.查出兩個日期之間間隔了多少個月份
select months_between(sysdate,to_date('2011-12-24','yyyy-mm-dd'))from dual;

7.查出在給定日期以後一週的第n個工做日的日期是多少

SELECT next_day(to_date('20110524','YYYYMMDD'),2) FROM dual; -- 2011/5/24 後一週的第二個工做日是多少? 2011/5/30

8.查詢當前會話時區中的當前日期
select sessiontimezone,current_date from dual; -- +08:00 25-5月 -11
select sessiontimezone,current_timestamp from dual; -- +08:00 25-5月 -11 05.47.23.107799 上午 +08:00

9.返回數據庫時區
select dbtimezone from dual;--+00:00

10. 返回會話中的日期和時間
select localtimestamp from dual;--25-5月 -11 05.51.34.022965 上午

11. 找出日期或間隔值的字段值
select extract(year from sysdate) 年 from dual;--2011
select extract(month from to_date('20110504','YYYY-mm-dd')) 月  from dual;--5

12. 如今給出一些實踐後的用法:
1)上月末天:
select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;

2)上月今天:
select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;

3).上月首天:
select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;
4).按照每週進行統計:
select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');

5).按照每個月進行統計:
select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');

6).按照每季度進行統計:
select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');

7).按照每一年進行統計:
select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy');

13. 日期時間間隔操做
當前時間減去7分鐘的時間 
  select sysdate,sysdate - interval ’7’ MINUTE from dual 
  當前時間減去7小時的時間 
  select sysdate - interval ’7’ hour from dual 
  當前時間減去7天的時間 
  select sysdate - interval ’7’ day from dual 
  當前時間減去7月的時間 
  select sysdate,sysdate - interval ’7’ month from dual 
  當前時間減去7年的時間 
  select sysdate,sysdate - interval ’7’ year from dual 
  時間間隔乘以一個數字 
select sysdate,sysdate - 8 *interval ’2’ hour from dual

14. 日期到字符操做 
  select sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual 
  select sysdate,to_char(sysdate,’yyyy-mm-dd hh:mi:ss’) from dual 
  select sysdate,to_char(sysdate,’yyyy-ddd hh:mi:ss’) from dual 
  select sysdate,to_char(sysdate,’yyyy-mm iw-d hh:mi:ss’) from dual

15. 字符到日期操做 
  select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from dual 
  具體用法和上面的to_char差很少。

16. trunk/ ROUND函數的使用
select trunc(sysdate) from dual; --2011/5/24
select trunc(sysdate ,'YEAR') from dual ;--2011/1/1
select trunc(sysdate ,'Month') from dual ;--2011/5/1
select trunc(sysdate ,'Day') from dual ;--2011/5/22
select to_char(trunc(sysdate ,'YYYY'),'YYYY') from dual –2011

17.

容易出錯的地方:
1) 採用「yyyy-MM-dd HH:mm:ss」的格式做爲格式進行轉換如:
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mm:ss') from dual; 
緣由是SQL中不區分大小寫,MM和mm被認爲是相同的格式代碼,因此Oracle的SQL採用了mi代替分鐘。 
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

2)要以24小時的形式顯示出來要用HH24  select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;//mi是分鐘  select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;//mm會顯示月份 致使表示錯誤

相關文章
相關標籤/搜索