亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle date 和 timestamp 區別詳解

2020-07-26 14:07:46
字體:
來源:轉載
供稿:網友

Oracle date 和 timestamp 區別詳解

1.DATE數據類型

     這個數據類型我們實在是太熟悉了,當我們需要表示日期和時間的話都會想到date類型。它可以存儲月,年,日,世紀,時,分和秒。它典型地用來表示什么時候事情已經發生或將要發生。

     DATE數據類型的問題在于它表示兩個事件發生時間間隔的度量粒度是秒。這個問題將在稍后討論timestamp的時候被解決??梢允褂肨O_CHAR函數把DATE數據進行傳統地包裝,達到表示成多種格式的目的。

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

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

SELECT TO_CHAR(date1, 'MMDDYYYY:HH24:MI:SS') date1,    TO_CHAR(date2, 'MMDDYYYY:HH24:MI:SS') date2,    trunc(86400 * (date2 - date1)) -    60 * (trunc((86400 * (date2 - date1)) / 60)) seconds,    trunc((86400 * (date2 - date1)) / 60) -    60 * (trunc(((86400 * (date2 - date1)) / 60) / 60)) minutes,    trunc(((86400 * (date2 - date1)) / 60) / 60) -    24 * (trunc((((86400 * (date2 - date1)) / 60) / 60) / 24)) hours,    trunc((((86400 * (date2 - date1)) / 60) / 60) / 24) days,    trunc(((((86400 * (date2 - date1)) / 60) / 60) / 24) / 7) weeks FROM date_tableDATE1 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

2.TIMESTAMP 數據類型

    DATE數據類型的主要問題是它粒度不能足夠區別出兩個事件哪個先發生。ORACLE已經在DATE數據類型上擴展出來了TIMESTAMP數據類型,它包括了所有DATE數據類型的年月日時分秒的信息,而且包括了小數秒的信息。如果你想把   DATE類型轉換成TIMESTAMP類型,就使用CAST函數。

 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

     正如你看到的,在轉換后的時間段尾部有了一段“.000000”。這是因為從date轉換過來的時候,沒有小數秒的信息,缺省為0。而且顯示格式是按照參數NLS_TIMESTAMP_FORMAT定的缺省格式顯示。當你把一個表中date類型字段的數據移到另一個表的timestamp類型字段中去的時候,可以直接寫INSERT SELECT語句,oracle會自動為你做轉換的。

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

    TIMESTAMP數據的格式化顯示和DATE 數據一樣。注意,to_char函數支持date和timestamp,但是trunc卻不支持TIMESTAMP數據類型。這已經清楚表明了在當兩個時間的差別極度重要的情況下,使用TIMESTAMP數據類型要比DATE數據類型更確切。

 SELECT TO_CHAR(time1,'MM/DD/YYYY HH24:MI:SS:FF3') "Date" FROM date_table  Date  -----------------------  06/20/2003 16:55:14:000  06/26/2003 11:16:36:000

     計算timestamp間的數據差別要比老的date數據類型更容易。當你直接相減的話,看看會發生什么。結果將更容易理解,第一行的17天,18小時,27分鐘和43秒。

SELECT time1,    time2,    substr((time2 - time1), instr((time2 - time1), ' ') + 7, 2) seconds,    substr((time2 - time1), instr((time2 - time1), ' ') + 4, 2) minutes,    substr((time2 - time1), instr((time2 - time1), ' ') + 1, 2) hours,    trunc(to_number(substr((time2 - time1), 1, instr(time2 - time1, ' ')))) days,    trunc(to_number(substr((time2 - time1), 1, instr(time2 - time1, ' '))) / 7) weeks FROM date_table TIME1 TIME2 SECONDS MINUTES HOURS DAYS WEEKS ------------------------- -------------------------- ------- ------- ----- ---- ----- 06/20/2003:16:55:14:000000 07/08/2003:11:22:57:000000 43 27 18 17 2 06/26/2003:11:16:36:000000 07/08/2003:11:22:57:000000 21 06 00 12 1

     這就意味著不再需要關心一天有多少秒在麻煩的計算中。因此,得到天數、月數、天數、時數、分鐘數和秒數就成為用substr函數摘取出數字的事情了。

3.系統日期和時間

     為了得到系統時間,返回成date數據類型。你可以使用sysdate函數。

SQL> SELECT SYSDATE FROM DUAL;

     為了得到系統時間,返回成timestamp數據類型。你可以使用systimpstamp函數。

SQL> SELECT SYSTIMESTAMP FROM DUAL;

    你可以設置初始化參數FIXED_DATE指定sysdate函數返回一個固定值。這用在測試日期和時間敏感的代碼。注意,這個參數對于systimestamp函數無效。

SQL> ALTER SYSTEM SET fixed_date = '2003-01-01-10:00:00'; System altered.SQL> select sysdate from dual; SYSDATE --------- 01-JAN-03SQL> select systimestamp from dual; SYSTIMESTAMP --------------------------------------------------------- 09-JUL-03 11.05.02.519000 AM -06:00

4.date和timestamp 的區別

     date類型是Oracle常用的日期型變量,他的時間間隔是秒。兩個日期型相減得到是兩個時間的間隔,注意單位是“天”。例如:查看一下當前距離倫敦奧運會開幕還有多長時間:

 select to_date('2012-7-28 03:12:00','yyyy-mm-dd hh24:mi:ss')-sysdate from dual

結果是:92.2472685185185天,然后你根據相應的時間換算你想要的間隔就行!這個結果可能對程序員有用,對于想直接看到結果的人,這個數字還不是很直觀,所以,就引出了timestamp類型

timestamp是DATE類型的擴展,可以精確到小數秒(fractional_seconds_precision),可以是0 to9,缺省是6。兩個timestamp相減的話,不能直接的得到天數書,而是得到,

多少天,多少小時,多少秒等,例如:同樣查看一下當前距離倫敦奧運會開幕還有多長時間.

select to_timestamp('2012-7-28 03:12:00','yyyy-mm-dd hh24:mi:ss')-systimestamp from dual

      結果是:+000000092 05:51:24.032000000,稍加截取,就可以得到92天5小時,51分鐘,24秒,這樣用戶看起來比較直觀一些!但是這個數字對程序員來說不是很直觀了,如果想要具體的時間長度的話,并且精度不要求到毫秒的話,可以將timestamp類型轉成date類型,然后直接相減即可。

5.date和timestamp之間的相互轉換可以通過

to_char來轉換timestamp――>date:

 select to_date(to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual

date ――>timestamp:

select to_timestamp(to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),'yyyy-mm-dd hh24:mi:ss') from dual

     當使用date和timestamp類型的時候,選擇是很清楚的。你可以隨意處置date和timestamp類型。當你試圖轉換到更強大的timestamp的時候,需要注意,它們既有類似的地方,更有不同的地方,而足以造成破壞。兩者在簡潔和間隔尺寸方面各有優勢,請合理地選擇。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩成人中文电影| 亚洲欧美精品suv| 97福利一区二区| 国产精品久久久久99| 成人有码视频在线播放| 亚洲最新中文字幕| 国产激情综合五月久久| 欧美亚洲视频在线看网址| 国产福利视频一区二区| 亚洲国产精品久久久| 欧美激情视频网| 亚洲石原莉奈一区二区在线观看| 日韩美女免费线视频| 欧美激情第三页| 亚洲va码欧洲m码| 欧美激情aaaa| 国产精品91免费在线| 日韩精品免费观看| 亚洲成人激情视频| 欧美老女人www| 久久久久久香蕉网| 成人高h视频在线| 国产成一区二区| 精品色蜜蜜精品视频在线观看| 日本最新高清不卡中文字幕| 久久精品中文字幕免费mv| 亚洲一区二区中文字幕| 亚洲成人网在线| 欧美性20hd另类| 精品国产一区二区在线| 国产精品亚洲综合天堂夜夜| 国精产品一区一区三区有限在线| 97视频国产在线| 亚洲精品国产电影| 亚洲第一精品电影| 久久好看免费视频| 日本免费一区二区三区视频观看| 国产精品亚洲欧美导航| 久久99青青精品免费观看| 久久久久久久国产| 成人免费看黄网站| 亚洲国产私拍精品国模在线观看| 日韩高清电影好看的电视剧电影| 中文日韩电影网站| 成人福利网站在线观看11| 亚洲精品国偷自产在线99热| 国产精品成人v| 久久午夜a级毛片| 日本欧美黄网站| 日韩男女性生活视频| 亚洲国产精品va在线看黑人| 国产一区二区三区三区在线观看| 日韩免费黄色av| 亚洲一区二区三区视频播放| 成人精品久久av网站| 欧美一区二区三区艳史| 91在线观看免费高清完整版在线观看| 亚洲国产精品电影在线观看| 国产一区二区日韩精品欧美精品| 91精品国产高清自在线| 日韩精品免费在线视频观看| 日韩精品有码在线观看| 中文字幕国产亚洲| 久久夜色精品亚洲噜噜国产mv| 久久久视频精品| 亚洲国产精品电影在线观看| 热久久视久久精品18亚洲精品| 91久久在线观看| 日韩电视剧免费观看网站| 国产午夜精品理论片a级探花| 青青草成人在线| 欧美电影电视剧在线观看| 亚洲热线99精品视频| 中文字幕久热精品在线视频| 日韩av电影免费观看高清| 欧美一区二区三区四区在线| 亚洲人成网站色ww在线| 亚洲女人被黑人巨大进入al| 亚洲第一综合天堂另类专| 久久天天躁日日躁| 日韩中文有码在线视频| 日韩中文字幕视频在线| 国产成人精品午夜| 日韩av网址在线| 亚洲福利视频网| 日本一区二区不卡| 亚洲毛片在线观看.| 色偷偷偷综合中文字幕;dd| 国产亚洲精品久久久久动| 亚洲精品二三区| 亚洲欧美国产视频| 久久久久久久久久久久av| 91免费高清视频| 国产精品96久久久久久| 久久久久久亚洲精品| 高清欧美性猛交xxxx黑人猛交| 国产性猛交xxxx免费看久久| 国产91|九色| 日韩美女免费观看| 欧美xxxx做受欧美.88| 国产精品电影网站| 97香蕉超级碰碰久久免费软件| 欧美电影在线播放| 国产精品久久久久久久久久久久久久| 欧美精品中文字幕一区| 国产一区二区在线免费视频| 91在线观看免费网站| 久久久久五月天| 亚洲国产精品一区二区三区| 色综合久久天天综线观看| 亚洲国产99精品国自产| 中文字幕亚洲一区二区三区五十路| 国产美女久久精品香蕉69| 91美女福利视频高清| 亚洲理论片在线观看| 国产视频精品一区二区三区| 日韩精品免费在线视频| 欧美丰满片xxx777| 中文字幕日韩精品在线| 亚洲xxxx在线| 亚洲国产精品久久久| 亚洲精品色婷婷福利天堂| 精品视频偷偷看在线观看| 欧美在线视频a| 欧美视频在线视频| 久久久伊人欧美| 亚洲人成欧美中文字幕| 亚洲精品久久久久中文字幕二区| 亚洲国产精品字幕| 清纯唯美亚洲激情| 丝袜情趣国产精品| 国产视频丨精品|在线观看| 国产小视频91| 欧美极品美女电影一区| 久久影院资源网| 亚洲精品乱码久久久久久金桔影视| 三级精品视频久久久久| 国产精品美乳在线观看| 日韩av不卡在线| 成人欧美一区二区三区在线湿哒哒| 国产日韩精品视频| 这里精品视频免费| 麻豆国产va免费精品高清在线| xvideos亚洲人网站| 亚洲品质视频自拍网| 日韩精品有码在线观看| 日韩精品久久久久久福利| 欧美特黄级在线| 91麻豆国产语对白在线观看| 永久免费毛片在线播放不卡| 在线播放亚洲激情| 国产精品日韩一区| 国产精品综合网站| 亚洲天堂第二页| 久久久久99精品久久久久| 久久久久久成人| 国产成人精品亚洲精品| 日韩av观看网址| 欧美精品www| 亚洲精选一区二区| 91精品在线国产| 日韩专区在线观看| 亚洲国产一区二区三区四区| 国产又爽又黄的激情精品视频|