国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

ORACLE DATE和TIMESTAMP數(shù)據(jù)類型的比較(一)

2024-08-29 13:45:10
字體:
供稿:網(wǎng)友

  
原著作者:James Koopmann

假如你想在Oracle中存儲DATE和時(shí)間信息的話,實(shí)際上你由兩種字段數(shù)據(jù)類型的選擇的話,就讓我們看看這兩種數(shù)據(jù)類型的差別和它們提供了些什么。

 

      DATE數(shù)據(jù)類型

這個(gè)數(shù)據(jù)類型我們實(shí)在是太熟悉了,當(dāng)我們需要表示日期和時(shí)間的話都會想到date類型。它可以存儲月,年,日,世紀(jì),時(shí),分和秒。它典型地用來表示什么時(shí)候事情已經(jīng)發(fā)生或?qū)⒁l(fā)生。DATE數(shù)據(jù)類型的問題在于它表示兩個(gè)事件發(fā)生時(shí)間間隔的度量粒度是秒。這個(gè)問題將在文章稍后討論timestamp的時(shí)候被解決。可以使用TO_CHAR函數(shù)把DATE數(shù)據(jù)進(jìn)行傳統(tǒng)地包裝,達(dá)到表示成多種格式的目的。

SQL> SELECT TO_CHAR(date1,'MM/DD/YYYY HH24:MI:SS') "Date" FROM date_table;

Date

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

06/20/2003 16:55:14

06/26/2003 11:16:36

 

我見到的大多數(shù)人陷入的麻煩就是計(jì)算兩個(gè)時(shí)間間的間隔年數(shù)、月數(shù)、天數(shù)、小時(shí)數(shù)和秒數(shù)。你需要明白的是,當(dāng)你進(jìn)行兩個(gè)日期的相減運(yùn)算的時(shí)候,得到的是天數(shù)。你需要乘上天天的秒數(shù)(1天=86400秒),然后,你可以再次計(jì)算得到你想要的間隔數(shù)。下面就是我的解決方法,可以精確計(jì)算出兩個(gè)時(shí)間的間隔。我明白這個(gè)例子可以更簡短些,但是我是為了顯示所有的數(shù)字來強(qiáng)調(diào)計(jì)算方式。

1         SELECT TO_CHAR(date1,'MMDDYYYY:HH24:MI:SS') date1,

  2         TO_CHAR(date2,'MMDDYYYY:HH24:MI:SS') date2,

  3         trunc(86400*(date2-date1))-

  4         60*(trunc((86400*(date2-date1))/60)) seconds,

  5         trunc((86400*(date2-date1))/60)-

  6         60*(trunc(((86400*(date2-date1))/60)/60)) minutes,

  7         trunc(((86400*(date2-date1))/60)/60)-

  8         24*(trunc((((86400*(date2-date1))/60)/60)/24)) hours,

  9         trunc((((86400*(date2-date1))/60)/60)/24) days,

10         trunc(((((86400*(date2-date1))/60)/60)/24)/7) weeks

11*        FROM date_table

DATE1             DATE2                SECONDS    MINUTES      HOURS      DAYS      WEEKS

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

06202003:16:55:14 07082003:11:22:57         43         27         18        17          2

06262003:11:16:36 07082003:11:22:57         21          6          0        12          1

 

TIMESTAMP 數(shù)據(jù)類型

DATE數(shù)據(jù)類型的主要問題是它粒度不能足夠區(qū)別出兩個(gè)事件哪個(gè)先發(fā)生。
ORACLE已經(jīng)在DATE數(shù)據(jù)類型上擴(kuò)展出來了TIMESTAMP數(shù)據(jù)類型,它包括了所有DATE數(shù)據(jù)類型的年月日時(shí)分秒的信息,而且包括了小數(shù)秒的信息。假如你想把DATE類型轉(zhuǎn)換成TIMESTAMP類型,就使用CAST函數(shù)。

SQL> SELECT CAST(date1 AS TIMESTAMP) "Date" FROM t;

Date

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

20-JUN-03 04.55.14.000000 PM

26-JUN-03 11.16.36.000000 AM

 

正如你看到的,在轉(zhuǎn)換后的時(shí)間段尾部有了一段“.000000”。這是因?yàn)閺膁ate轉(zhuǎn)換過來的時(shí)候,沒有小數(shù)秒的信息,缺省為0。而且顯示格式是按照參數(shù)NLS_TIMESTAMP_FORMAT定的缺省格式顯示。當(dāng)你把一個(gè)表中date類型字段的數(shù)據(jù)移到另一個(gè)表的timestamp類型字段中去的時(shí)候,可以直接寫INSERT SELECT語句,oracle會自動為你做轉(zhuǎn)換的。

1  SELECT TO_CHAR(time1,'MM/DD/YYYY HH24:MI:SS') "Date" FROM date_table

Date

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

06/20/2003 16:55:14

06/26/2003 11:16:36

 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 麟游县| 武鸣县| 永昌县| 黎城县| 芜湖市| 泗阳县| 莒南县| 浮山县| 巴中市| 辛集市| 即墨市| 安塞县| 长海县| 富阳市| 确山县| 定日县| 克拉玛依市| 福清市| 威信县| 焦作市| 遂平县| 兴城市| 景东| 青龙| 易门县| 洞头县| 通渭县| 东安县| 和顺县| 大宁县| 乌海市| 隆尧县| 韶山市| 澎湖县| 靖边县| 土默特左旗| 道真| 阿鲁科尔沁旗| 赤水市| 中山市| 遂昌县|