1. 程式人生 > >oracle 日期操作 彙總

oracle 日期操作 彙總

  • 計算從今天起的第一個星期日是的日期
select NEXT_DAY(SYSDATE,7) from dual;
  • 計算當前日期的年月日  
select Extract(year from sysdate) from dual;  --年

select Extract(month from sysdate) from dual; --月

select Extract(day from sysdate) from dual;   --日

 ------------------------------------------------------------------------------------

加法 

 select sysdate,add_months(sysdate,12) from dual;        --加1年
 select sysdate,add_months(sysdate,1) from dual;        --加1月
 select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual;   --加1星期
 select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual;   --加1天
 select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1小時
 select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1分鐘
 select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --加1秒


減法

 select sysdate,add_months(sysdate,-12) from dual;        --減1年
 select sysdate,add_months(sysdate,-1) from dual;        --減1月
 select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual;   --減1星期
 select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual;   --減1天
 select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual;  --減1小時
 select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --減1分鐘
 select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual;  --減1秒 

 

  • 有兩個日期資料START_DATE,END_DATE,欲得到這兩個日期的時間差(以天,小時,分鐘,秒,毫秒):
天:
ROUND(TO_NUMBER(END_DATE - START_DATE))
小時:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)
分鐘:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)
秒:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)
毫秒:
ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 60)
  • 減12小時
select sysdate s, (sysdate - to_dsinterval('0 12:00:00')) ss from dual;  


Oracle 獲取當前日期及日期格式


   獲取系統日期:  SYSDATE()
   格式化日期:     TO_DATE(SYSDATE(),'YY/MM/DD HH24:MI:SS)
   格式化字元:      TO_CHAR(SYSDATE(),'YY/MM/DD HH24:MI:SS)
   格式化數字:      TO_NUMBER


   注: TO_CHAR  把日期或數字轉換為字串 
                                 TO_CHAR(number, '格式') 
                                 TO_CHAR(salary, '$99,999.99') 
                                 TO_CHAR(date, '格式') 
            TO_DATE  把字串轉換為資料庫中的日期型別
                                 TO_DATE(char, '格式') 
            TO_NUMBER  將字串轉換為數字 
                                 TO_NUMBER(char, '格式') 

 

Oracle-日期轉化數字的方法

1. 首先你需要先把日期轉化為字元   to_char(sysdate,'yyyymmdd')

2. to_number(to_char(sysdate,'yyyymmdd'))

select to_number(to_char(sysdate,'yyyymmdd')) from dual;

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 返回系統日期,輸出 25-12月-09
select sysdate from dual;
  • mi是分鐘,輸出 2009-12-25 14:23:31
select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from dual;

 

  • mm會顯示月份,輸出 2009-12-25 14:12:31 
select to_char(sysdate,'yyyy-MM-dd HH24:mm:ss') from dual;

 

  • 輸出 09-12-25 14:23:31
select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual  

 

  • 輸出 2009-12-25 14:23:31
select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh24:mi:ss') from dual 

          而如果把上式寫作:  select to_date('2009-12-25 14:23:31','yyyy-mm-dd,hh:mi:ss') from dual則會報錯,因為小時hh是12進位制,14為非法輸入,不能匹配。
 

  • 輸出 $10,000,00 :
select to_char(1000000,'$99,999,99') from dual;

 

  • 輸出 RMB10,000,00 : 
select to_char(1000000,'L99,999,99') from dual;

 

  • 輸出 1000000.12 :
select trunc(to_number('1000000.123'),2) from dual;
select to_number('1000000.123') from dual;


轉換的格式:

表示 year 的:y   表示年的最後一位 、
                      yy   表示年的最後2位 、 
                    yyy   表示年的最後3位 、
                  yyyy   用4位數表示年
表示month的: mm  用2位數字表示月 、
                        mon  用簡寫形式, 比如11月或者nov 、
                     month  用全稱, 比如11月或者november
表示day的:dd  表示當月第幾天 、
                  ddd  表示當年第幾天 、
                    dy  當週第幾天,簡寫, 比如星期五或者fri 、
                  day  當週第幾天,全稱, 比如星期五或者friday
表示hour的:hh   2位數表示小時 12進位制 、 
                  hh24  2位數表示小時 24小時
表示minute的:mi 2位數表示分鐘
表示second的:ss 2位數表示秒 60進位制
表示季度的:q 一位數 表示季度 (1-4)
另外還有ww 用來表示當年第幾周 w用來表示當月第幾周。
24小時制下的時間範圍:00:00:00-23:59:59
12小時制下的時間範圍:1:00:00-12:59:59
數字格式:  9  代表一個數字 
               0  強制顯示0 
               $  放置一個$符 
               L  放置一個浮動本地貨幣符 
               .  顯示小數點 
               ,  顯示千位指示符 


補充:

  • 當前時間減去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 '7' hour from dual;



含義解釋: 

  •   Dual偽列

      Dual 是 Oracle中的一個實際存在的表,任何使用者均可讀取,常用在沒有目標表的select語句塊中。

      不同系統可能返回日期的格式不一樣。      返回當前連線的使用者:select user from dual;


1.日期時間間隔操作   
  當前時間減去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 
2.日期到字元操作 
  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   
  參考oracle的相關關文件(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)   
3. 字元到日期操作   
  select to_date(’2003-10-17 21:15:37’,’yyyy-mm-dd hh24:mi:ss’) from dual   
  具體用法和上面的to_char差不多。 
4. trunk/ ROUND函式的使用 
  select trunc(sysdate ,’YEAR’) from dual 
  select trunc(sysdate ) from dual 
  select to_char(trunc(sysdate ,’YYYY’),’YYYY’) from dual 
5.oracle有毫秒級的資料型別 
  --返回當前時間 年月日小時分秒毫秒 
  select to_char(current_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from dual; 
  --返回當前 時間的秒毫秒,可以指定秒後面的精度(最大=9)   
  select to_char(current_timestamp(9),’MI:SSxFF’) from dual; 
6.計算程式執行的時間(ms) 
  declare 
  type rc is ref cursor;   
  l_rc rc; 
  l_dummy all_objects.object_name%type;   
  l_start number default dbms_utility.get_time; 
  begin 
  for I in 1 .. 1000 
  loop 
  open l_rc for   
  ’select object_name from all_objects ’||   
  ’where object_id = ’ || i;   
  fetch l_rc into l_dummy;   
  close l_rc; 
  end loop;   
  dbms_output.put_line 
  ( round( (dbms_utility.get_time-l_start)/100, 2 ) || 
  ’ seconds...’ ); 
  end;