熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

oracle時間用法

2013-11-13 16:19:11  來源: Oracle 

  oracle中小時的表示方法貼出來與大家共享!

  小時表示方法to_date( ::yyyymmdd hh:mi:ss)

  小時表示方法to_date( ::yyyymmdd hh:mi:ss)

  select  usernumber from usertailor  where createtime>to_date( :: yyyymmdd hh:mi:ss);

  

  常用日期型函數

  Sysdate 當前日期和時間

  SQL> Select sysdate from dual;

  SYSDATE

  

  

  Last_day 本月最後一天

  SQL> Select last_day(sysdate) from dual;

  LAST_DAY(S

  

  

  Add_months(dn) 當前日期d後推n個月

  用於從一個日期值增加或減少一些月份

  date_value:=add_months(date_valuenumber_of_months)

  SQL> Select add_months(sysdate) from dual;

  ADD_MONTHS

  

  

  Months_between(fs) 日期f和s間相差月數

  SQL> select months_between(sysdateto_date(yyyymmdd))from dual;

  MONTHS_BETWEEN(SYSDATETO_DATE(YYYYMMDD))

  

  

  NEXT_DAY(d day_of_week)

  返回由day_of_week命名的在變量d指定的日期之後的第一個工作日的日期參數day_of_week必須為該星期中的某一天

  SQL> SELECT next_day(to_date(YYYYMMDD)) FROM dual;

  NEXT_DAY(T

  

  

  current_date()返回當前會話時區中的當前日期

  date_value:=current_date

  SQL> column sessiontimezone for a

  SQL> select sessiontimezonecurrent_date from dual;

  SESSIONTIMEZONE CURRENT_DA

  

  +:         

  SQL> alter session set time_zone=:   /

  會話已更改

  SQL> select sessiontimezonecurrent_timestamp from dual;

  SESSIONTIMEZONE CURRENT_TIMESTAMP

  

  :          下午 :

  current_timestamp()以timestamp with time zone數據類型返回當前會話時區中的當前日期

  SQL> select current_timestamp from dual;

  CURRENT_TIMESTAMP

  

   上午 +:

  dbtimezone()返回時區

  SQL> select dbtimezone from dual;

  DBTIME

  

  :

  extract()找出日期或間隔值的字段值

  date_value:=extract(date_field from [datetime_value|interval_value])

  SQL> select extract(month from sysdate) This Month from dual;

  This Month

  

  

  SQL> select extract(year from add_months(sysdate)) Years from dual;

  Years

  

  

  localtimestamp()返回會話中的日期和時間

  SQL> select localtimestamp from dual;

  LOCALTIMESTAMP

  

   上午

  常用日期數據格式(該段為摘抄)

  Y或YY或YYY 年的最後一位兩位或三位 Select to_char(sysdateYYY) from dual 表示

  SYEAR或YEAR SYEAR使公元前的年份前加一負號 Select to_char(sysdateSYEAR) from dual 表示公元前

  Q 季度月為第一季度 Select to_char(sysdateQ) from dual 表示第二季度①

  MM 月份數 Select to_char(sysdateMM) from dual 表示

  RM 月份的羅馬表示 Select to_char(sysdateRM) from dual IV表示

  Month 用個字符長度表示的月份名 Select to_char(sysdateMonth) from dual May後跟個空格表示

  WW 當年第幾周 Select to_char(sysdateWW) from dual 表示日為第

  W 本月第幾周 Select to_char(sysdateW) from dual 日為第

  DDD 當年第幾 日為日為 Select to_char(sysdateDDD) from dual 日為第

  DD 當月第幾天 Select to_char(sysdateDD) from dual 日為第

  D 周內第幾天 Select to_char(sysdateD) from dual 日為星期一

  DY 周內第幾天縮寫 Select to_char(sysdateDY) from dual SUN 日為星期天

  HH或HH 進制小時數 Select to_char(sysdateHH) from dual 午夜點過分為

  HH 小時制 Select to_char(sysdateHH) from dual 下午分為

  MI 分鐘數() Select to_char(sysdateMI) from dual 下午

  SS 秒數() Select to_char(sysdateSS) from dual

  提示注意不要將MM格式用於分鐘(分鐘應該使用MI)MM是用於月份的格式將它用於分鐘也能工作但結果是錯誤的

  現在給出一些實踐後的用法

  上月末天

  SQL> select to_char(add_months(last_day(sysdate))yyyyMMdd) LastDay from

  dual;

  LASTDAY

  

  

  上月今天

  SQL> select to_char(add_months(sysdate)yyyyMMdd) PreToday from dual;

  PRETODAY

  

  

  上月首天

  SQL> select to_char(add_months(last_day(sysdate)+)yyyyMMdd) firstDay from dual;

  FIRSTDAY

  

  

  按照每周進行統計

  SQL> select to_char(sysdateww) from dual group by to_char(sysdateww);

  TO

  

  

  按照每月進行統計

  SQL> select to_char(sysdatemm) from dual group by to_char(sysdatemm);

  TO

  

  

  按照每季度進行統計

  SQL> select to_char(sysdateq) from dual group by to_char(sysdateq);

  T

  

  

  按照每年進行統計

  SQL> select to_char(sysdateyyyy) from dual group by to_char(sysdateyyyy);

  TO_C

  

  

  要找到某月中所有周五的具體日期

  select to_char(tdYYMMDD) from (

  select trunc(sysdate MM)+rownum as d

  from dba_objects

  where rownum < ) t

  where to_char(td MM) = to_char(sysdate MM) 找出當前月份的周五的日期

  and trim(to_char(td Day)) = 星期五

  

  

  

  

  

  

  如果把where to_char(td MM) = to_char(sysdate MM)改成sysdate即為查找當前月份的前三個月中的每周五的日期

  oracle中時間運算

  內容如下

  oracle支持對日期進行運算

  日期運算時是以天為單位進行的

  當需要以分秒等更小的單位算值時按時間進制進行轉換即可

  進行時間進制轉換時注意加括號否則會出問題

  SQL> alter session set nls_date_format=yyyymmdd hh:mi:ss;

  會話已更改

  SQL> set serverout on

  SQL> declare

   DateValue date;

   begin

   select sysdate into DateValue from dual;

   dbms_outputput_line(源時間:||to_char(DateValue));

   dbms_outputput_line(源時間減天:||to_char(DateValue));

   dbms_outputput_line(源時間減小時:||to_char(DateValue/));

   dbms_outputput_line(源時間減小時分:||to_char(DateValue//(*)));

   dbms_outputput_line(源時間減小時秒:||to_char(DateValue//(*)/(**)));

   end;

   /

  源時間: ::

  源時間減天: ::

  源時間減小時: ::

  源時間減小時分: ::

  源時間減小時秒: ::

  PL/SQL 過程已成功完成

  在Oracle中實現時間相加處理

   名稱Add_Times

   功能返回d與NewTime相加以後的結果實現時間的相加

   說明對於NewTime中的日期不予考慮

   日期

   版本

   作者Kevin

  create or replace function Add_Times(d in dateNewTime in date) return date

  is

  hh   number;

  mm   number;

  ss   number;

  hours number;

  dResult  date;

  begin

   下面依次取出時

  select to_number(to_char(NewTimeHH)) into hh from dual;

  select to_number(to_char(NewTimeMI)) into mm from dual;

  select to_number(to_char(NewTimeSS)) into ss from dual;

   換算出NewTime中小時總和在一天的百分幾

  hours := (hh + (mm / ) + (ss / ))/ ;

   得出時間相加後的結果

  select d + hours into dResult from dual;

  return(dResult);

  end Add_Times;

   測試用例

   select Add_Times(sysdateto_date( ::YYYYMMDD HH:MI:SS)) from dual

  在Oraclei中計算時間差

  計算時間差是Oracle DATA數據類型的一個常見問題Oracle支持日期計算你可以創建諸如日期-日期這樣的表達式來計算這兩個日期之間的時間差

  一旦你發現了時間差異你可以使用簡單的技巧來以天小時分鐘或者秒為單位來計算時間差為了得到數據差你必須選擇合適的時間度量單位這樣就可以進行數據格式隱藏

  使用完善復雜的轉換函數來轉換日期是一個誘惑但是你會發現這不是最好的解決方法

  round(to_number(enddatestart_date)) 消逝的時間(以天為單位)

  round(to_number(enddatestart_date)*) 消逝的時間(以小時為單位)

  round(to_number(enddatestart_date)*) 消逝的時間(以分鐘為單位)

  顯示時間差的默認模式是什麼?為了找到這個問題的答案讓我們進行一個簡單的SQL *Plus查詢

  SQL> select sysdate(sysdate) from dual;

  SYSDATE(SYSDATE)

  

  

  這裡我們看到了Oracle使用天來作為消逝時間的單位所以我們可以很容易的使用轉換函數來把它轉換成小時或者分鐘然而當分鐘數不是一個整數時我們就會遇到放置小數點的問題

  Select

  (sysdate(sysdate))*

  from

  dual;

  (SYSDATE(SYSDATE))*

  

  

  當然我們可以用ROUND函數(即取整函數)來解決這個問題但是要記住我們必須首先把DATE數據類型轉換成NUMBER數據類型

  Select

  round(to_number(sysdate(sysdate))*)

  from

  dual;

  ROUND(TO_NUMBER(SYSDATE(SYSDATE))*)

  

  

  我們可以用這些函數把一個消逝時間近似轉換成分鐘並把這個值寫入Oracle表格中在這個例子裡我們有一個離線(logoff)系統級觸發機制來計算已經開始的會話時間並把它放入一個Oracle STATSPACK USER_LOG擴展表格之中

  Update

  perfstatstats$user_log

  set

  elapsed_minutes =

  round(to_number(logoff_timelogon_time)*)

  where

  user = user_id

  and

  elapsed_minutes is NULL;

  查出任一年月所含的工作日

  CREATE OR REPLACE FUNCTION Get_WorkingDays(

  ny IN VARCHAR

  ) RETURN INTEGER IS

  /*

  函數名稱Get_WorkingDays

  中文名稱求某一年月中共有多少工作日

  作者姓名: XINGPING

  編寫時間:

  輸入參數NY:所求包含工作日數的年月格式為yyyymm

  返 回 值整型值包含的工作日數目

  算法描述

  )列舉出參數給出的年月中的每一天這裡使用了一個表(ljrq是我的庫中的一張表這個表可以是有權訪問的記錄條數至少為的任意一張表或視圖)來構造出某年月的每一天

  )用這些日期和一個已知星期幾的日期相減(是星期天)所得的差再對求模如果所求年月在以前那麼所得的差既是負數求模後所得值范圍為大於小於表示星期六故先將求模的結果加再求的模

  )過濾掉結果集中值為的元素然後求count所得即為工作日數目

  */

  Result INTEGER;

  BEGIN

  SELECT COUNT(*) INTO Result

  FROM (SELECT MOD(MOD(qrqto_date(yyyymmdd))) weekday

  FROM ( SELECT to_date(ny||tddyyyymmdd) rq

  FROM (SELECT substr(+ROWNUM) dd

  FROM ljrq z WHERE Rownum<=

  ) t

  WHERE to_date(ny||tddyyyymmdd)

  BETWEEN to_date(nyyyyymm)

  AND last_day(to_date(nyyyyymm))

  )q

  ) a

  WHERE aweekday NOT IN();

  RETURN Result;

  END Get_WorkingDays;

  ______________________________________

  還有一個版本

  CREATE OR REPLACE FUNCTION Get_WorkingDays(

  ny IN VARCHAR

  ) RETURN INTEGER IS

  /*

  函數名稱Get_WorkingDays

  中文名稱求某一年月中共有多少工作日

  作者姓名: XINGPING

  編寫時間:

  輸入參數NY:所求包含工作日數的年月格式為yyyymm

  返 回 值整型值包含的工作日數目

  算法描述使用Last_day函數計算出參數所給年月共包含多少天根據這個值來構造一個循環在這個循環中先求這個月的每一天與一個已知是星期天的日期(是星期天)的差所得的差再對求模如果所求日期在以前那麼所得的差既是負數求模後所得值范圍為大於小於表示星期六故先將求模的結果加再求的模 如過所得值不等於(即不是星期六和星期天)則算一個工作日

  */

  Result INTEGER := ;

  myts INTEGER;      所給年月的天數

  scts INTEGER;      某天距所差的天數

  rq   DATE;

  djt INTEGER := ;  

  BEGIN

  myts := to_char(last_day(to_date(nyyyyymm))dd);

  LOOP

  rq := TO_date(ny||substr(+djt)yyyymmdd);

  scts := rq to_date(yyyymmdd);

  IF MOD(MOD(scts)+) NOT IN() THEN

  Result := Result + ;

  END IF;

  djt := djt + ;

  EXIT WHEN djt>myts;

  END LOOP;

  RETURN Result;

  END Get_WorkingDays;


From:http://tw.wingwit.com/Article/program/Oracle/201311/18138.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.