• Oracle關于時間/日期的操作

     更新時間:2007年03月21日 00:00:00   作者:  
    在oracle中有很多關于日期的函數,如:

      1、add_months()用于從一個日期值增加或減少一些月份

      date_value:=add_months(date_value,number_of_months)

      例:

      SQL> select add_months(sysdate,12) "Next Year" from dual;

      Next Year

      ----------

      13-11月-04

      SQL> select add_months(sysdate,112) "Last Year" from dual;

      Last Year

      ----------

      13-3月 -13

     

      SQL>

      2、current_date()返回當前會放時區中的當前日期

      date_value:=current_date

      SQL> column sessiontimezone for a15

      SQL> select sessiontimezone,current_date from dual;

      SESSIONTIMEZONE CURRENT_DA

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

      +08:00 13-11月-03

      SQL> alter session set time_zone='-11:00'

      2 /

      會話已更改。

      SQL> select sessiontimezone,current_timestamp from dual;

      SESSIONTIMEZONE CURRENT_TIMESTAMP

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

      -11:00 12-11月-03 04.59.13.668000 下午 -11:

      00

      SQL>

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

      timestamp_with_time_zone_value:=current_timestamp([timestamp_precision])

      SQL> column sessiontimezone for a15

      SQL> column current_timestamp format a36

      SQL> select sessiontimezone,current_timestamp from dual;

      SESSIONTIMEZONE CURRENT_TIMESTAMP

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

      +08:00 13-11月-03 11.56.28.160000 上午 +08:

      00

      SQL> alter session set time_zone='-11:00'

      2 /

      會話已更改。

      SQL> select sessiontimezone,current_timestamp from dual;

      SESSIONTIMEZONE CURRENT_TIMESTAMP

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

      -11:00 12-11月-03 04.58.00.243000 下午 -11:

      00

      SQL>

      4、dbtimezone()返回時區

      varchar_value:=dbtimezone

      SQL> select dbtimezone from dual;

      DBTIME

      ------

      -07:00

      SQL>

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

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

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

      This Month

      ----------

      11

      SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual;

      3 Years Out

      -----------

      2006

      SQL>

      6、last_day()返回包含了日期參數的月份的最后一天的日期

      date_value:=last_day(date_value)

      SQL> select last_day(date'2000-02-01') "Leap Yr?" from dual;

      Leap Yr?

      ----------

      29-2月 -00

      SQL> select last_day(sysdate) "Last day of this month" from dual;

      Last day o

      ----------

      30-11月-03

      SQL>

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

      timestamp_value:=localtimestamp

      SQL> column localtimestamp format a28

      SQL> select localtimestamp from dual;

      LOCALTIMESTAMP

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

      13-11月-03 12.09.15.433000

      下午

      SQL> select localtimestamp,current_timestamp from dual;

      LOCALTIMESTAMP CURRENT_TIMESTAMP

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

      13-11月-03 12.09.31.006000 13-11月-03 12.09.31.006000 下午 +08:

      下午 00

      SQL> alter session set time_zone='-11:00';

      會話已更改。

      SQL> select localtimestamp,to_char(sysdate,'DD-MM-YYYY HH:MI:SS AM') "SYSDATE" from dual;

      LOCALTIMESTAMP SYSDATE

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

      12-11月-03 05.11.31.259000 13-11-2003 12:11:31 下午

      下午

      SQL>

      8、months_between()判斷兩個日期之間的月份數量

      number_value:=months_between(date_value,date_value)

      SQL> select months_between(sysdate,date'1971-05-18') from dual;

      MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18')

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

      389.855143

      SQL> select months_between(sysdate,date'2001-01-01') from dual;

      MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01')

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

      34.4035409

      SQL>

      9、next_day()給定一個日期值,返回由第二個參數指出的日子第一次出現在的日期值(應返回相應日子的名稱字符串)

      說明:

      單行日期函數

      單行日期函數操作data數據類型,絕大多數都有data數據類型的參數,絕大多數返回的也是data數據類型的值。

      10、add_months(,)

      返回日期d加上i個月后的結果。i可以使任意整數。如果i是一個小數,那么數據庫將隱式的他轉換成整數,將會截去小數點后面的部分。

      11、last_day()

      函數返回包含日期d的月份的最后一天

      12、months_between(,)

      返回d1和d2之間月的數目,如果d1和d2的日的日期都相同,或者都使該月的最后一天,那么將返回一個整數,否則會返回的結果將包含一個分數。

      13、new_time(,,)

      d1是一個日期數據類型,當時區tz1中的日期和時間是d時,返回時區tz2中的日期和時間。tz1和tz2時字符串。

      14、next_day(,)

      返回日期d后由dow給出的條件的第一天,dow使用當前會話中給出的語言指定了一周中的某一天,返回的時間分量與d的時間分量相同。

      select next_day(''01-jan-2000'',''monday'') "1st monday",next_day(''01-nov-2004'',''tuesday'')+7 "2nd tuesday") from dual;1st monday 2nd tuesday03-jan-2000 09-nov-2004

      15、round([,])

      將日期d按照fmt指定的格式舍入,fmt為字符串。

      16、syadate

      函數沒有參數,返回當前日期和時間。

      17、trunc([,])

      返回由fmt指定的單位的日期d.

      單行轉換函數

      單行轉換函數用于操作多數據類型,在數據類型之間進行轉換。

      18、chartorwid()

      c 使一個字符串,函數將c轉換為rwid數據類型。

      select test_id from test_case where rowid=chartorwid(''aaaa0saacaaaaliaaa'')

      19、convert(,[,])

      c尾字符串,dset、sset是兩個字符集,函數將字符串c由sset字符集轉換為dset字符集,sset的缺省設置為數據庫的字符集。

      20、hextoraw()

      x為16進制的字符串,函數將16進制的x轉換為raw數據類型。

      21、rawtohex()

      x是raw數據類型字符串,函數將raw數據類轉換為16進制的數據類型。

      22、rowidtochar()

      函數將rowid數據類型轉換為char數據類型。

      23、to_char([[,)

      x是一個data或number數據類型,函數將x轉換成fmt指定格式的char數據類型,如果x為日期nlsparm=nls_date_language 控制返回的月份和日份所使用的語言。如果x為數字nlsparm=nls_numeric_characters 用來指定小數位和千分位的分隔符,以及貨幣符號。

      nls_numeric_characters ="dg", nls_currency="string"

      24、to_date([,[,)

      c表示字符串,fmt表示一種特殊格式的字符串。返回按照fmt格式顯示的c,nlsparm表示使用的語言。函數將字符串c轉換成date數據類型。

      25、to_multi_byte()

      c表示一個字符串,函數將c的擔子截字符轉換成多字節字符。

      26、to_number([,[,)

      c表示字符串,fmt表示一個特殊格式的字符串,函數返回值按照fmt指定的格式顯示。nlsparm表示語言,函數將返回c代表的數字。

      27、to_single_byte()

      將字符串c中得多字節字符轉化成等價的單字節字符。該函數僅當數據庫字符集同時包含單字節和多字節字符時才使用。

     

      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;

    相關文章

    • PL/SQL實現Oracle數據庫任務調度

      PL/SQL實現Oracle數據庫任務調度

      PL/SQL實現Oracle數據庫任務調度...
      2007-03-03
    • Oracle9i 動態SGA,PGA特性探索

      Oracle9i 動態SGA,PGA特性探索

      雖然Oracle9i中的內存管理仍然需要很多的手工操作,不過大部分的Oracle管理員可以使用工具來連續地監控Oracle SGA中的內存使用,并且可以根據Oracle instance中現在的使用情況來自動地重新分配內存。
      2009-03-03
    • oracle日志操作模式(歸檔模式和非歸檔模式的利與弊)

      oracle日志操作模式(歸檔模式和非歸檔模式的利與弊)

      在Oracle數據庫中,主要有兩種日志操作模式,分別為非歸檔模式與歸檔模式。默認情況下,數據庫采用的是非歸檔模式。作為一個合格的數據庫管理員,應當深入了解這兩種日志操作模式的特點,并且在數據庫建立時,選擇合適的操作模式
      2013-01-01
    • Oracle修改表空間大小的方法

      Oracle修改表空間大小的方法

      這篇文章主要介紹了Oracle修改表空間大小的方法,實例講述了Oracle通過命令行實現修改Oracle表空間大小的方法,非常簡單實用,需要的朋友可以參考下
      2015-12-12
    • Oracle RMAN自動備份控制文件方法介紹

      Oracle RMAN自動備份控制文件方法介紹

      這篇文章主要介紹了RMAN自動備份控制文件方法介紹,具有一定參考價值,需要的朋友可以了解下。
      2017-09-09
    • AWR 深入分析( Automatic Workload Repository )

      AWR 深入分析( Automatic Workload Repository )

      本篇文章,小編為大家介紹一下關于AWR 深入分析( Automatic Workload Repository )有需要的朋友可以參考一下
      2013-04-04
    • oracle 數據庫啟動階段分析

      oracle 數據庫啟動階段分析

      這篇文章主要介紹了oracle 數據庫啟動階段分析,包括三個階段的詳細介紹,需要的朋友可以了解下。
      2017-09-09
    • Oracle 忘記密碼的找回方法

      Oracle 忘記密碼的找回方法

      安裝oracle 11g時,居然把剛剛更改的數據庫管理員密碼給忘了,google查詢,終于找到修改方法。
      2009-02-02
    • 基于ORA-12170 TNS 連接超時解決辦法詳解

      基于ORA-12170 TNS 連接超時解決辦法詳解

      本篇文章是對ORA-12170 TNS 連接超時的解決辦法進行了詳細的分析介紹,需要的朋友參考下
      2013-06-06
    • 解決Oracle RMAN刪除歸檔日志不釋放問題的方法

      解決Oracle RMAN刪除歸檔日志不釋放問題的方法

      RMAN清除方式會自動清除磁盤上的歸檔日志文件,同時會釋放控制文件中對應的歸檔日志的歸檔信息,但最近在使用中就遇到了一個問題,下面這篇文章主要給大家介紹了關于解決Oracle RMAN刪除歸檔日志不釋放問題的方法,需要的朋友可以參考下。
      2017-07-07

    最新評論

    美丽人妻被按摩中出中文字幕