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

如何掌握Oracle中的時間間隔型數據

2013-11-13 15:28:29  來源: Oracle 

  在i 版本以前Oracle 沒有內置的方式來記錄時間的流逝DATE型數據用來記錄單獨的時間點但是要表達一個時間量(也就是一個間隔)數據庫的設計者就必須把時間間隔轉換成原始單位秒然後用一個NUMBER列來保存它

  雖然NUMBER這個數據類型可以以秒為單位准確地表示時間但是它使得時間的計算變得很困難比如秒是分鐘分鐘是個小時個小時等於天——這些數字在以十進制為基礎的數字系統中都是非常蹩腳的

  在Oracle i中按照SQL 標准增加了時間間隔型數據INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND它們和其他幾種數據類型一起使得對時間的處理更加准確TIMESTAMPTIMESTAMP WITH TIME ZONE和TIMESTAMP WITH LOCAL TIME ZONE等數據類型都把時間的表達精確到了若干分之一秒而且後面兩種還解決了地理位置造成的時間變化

  在SQL和PL/SQL中你都可以用時間間隔型數據它們都是用同一種方式規定的

  INTERVAL YEAR[(year_precision)] TO MONTH

  INTERVAL DAY[(day_precision)] TO SECOND[(fractional_seconds_precision)]

  對於精確數值規定有缺省值年和日是兩位數若干分之一秒是六位數

  時間間隔的大小由INTERVAL來表示後面緊接一個放在單引號中的表達式以及用來解釋該表達式的文字用YEAR TO MONTH表示時間間隔大小時要在年和月之間用一個連字符() 連接而DAY TO SECOND表示時間間隔大小時要在日和時間之間用一個空格連接舉個例子來說下面是個月的時間間隔的表示方法

  INTERVAL YEAR TO MONTH

  下面的例子表示個小時分鐘

  INTERVAL DAY TO SECOND(

  時間間隔可以為正也可以為負它們可以從各種TIMESTAMP數據類型中加上或者減去從而得到一個新的TIMESTAMP數據類型它們之間也可以做加減運算得到新的時間間隔

  列表A說明了怎樣創建一個表格來記錄一個事件的開始時間和持續時間如實驗等數據被收集以後SQL中內置的摘要函數不需要與原始單位秒進行相互轉換就可以報告總的持續時間和平均持續時間

  列表A

  CREATE TABLE experiment

  (experiment_id NUMBER(

  experiment_desc VARCHAR

  experiment_start TIMESTAMP

  experiment_duration INTERVAL DAY() TO SECOND(

  )

  Table created

  INSERT INTO experiment

  VALUES (

   Busted urban myth JUN PM

  INTERVAL DAY() TO SECOND(

  )

   row created

  col experiment_desc format a

  col experiment_start format a

  col experiment_duration format a

  SELECT * FROM experiment

  EXPERIMENT_ID EXPERIMENT_DESC —— —— EXPERIMENT_START EXPERIMENT_DURATION —— —— Busted urban myth JUN PM +

  —— Now compute the experiments ending time

  SELECT experiment_id experiment_start

  experiment_start + experiment_durationexperiment_end

  FROM experiment

  EXPERIMENT_ID EXPERIMENT_START —— —— EXPERIMENT_END —— JUN PM JUN PM

  但遺憾的是 TO_CHAR函數中沒有包括任何能夠映射到各個時間間隔數據類型片段的格式模型但是你可以用新的EXTRACT函數來提取和合並這些片段格式如下

  EXTRACT(timepart FROM interval_expression)

  列表B給出了一個運用這種方法的例子

  列表B

  SELECT EXTRACT(DAY FROM experiment_duration) ||

   days || EXTRACT (HOUR FROM experiment_duration) ||

   hours || EXTRACT (MINUTE FROM experiment_duration) ||

   minutes Duration

  FROM experiment

  DURATION

  

   days hours minutes

  首先從experiment_duration列中將天數提取出來文字Days是與之相聯的對於實驗持續時間中的小時和分鐘部分操作與上述方法一樣


From:http://tw.wingwit.com/Article/program/Oracle/201311/16775.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.