91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle date 和 timestamp 區別

發布時間:2020-08-09 17:16:05 來源:ITPUB博客 閱讀:175 作者:pentium 欄目:關系型數據庫

https://www.cnblogs.com/java-class/p/4742740.html

1.DATE數據類型

     這個數據類型我們實在是太熟悉了,當我們需要表示日期和時間的話都會想到date類型。它可以存儲月,年,日,世紀,時,分和秒。它典型地用來表示什么時候事情已經發生或將要發生。
     DATE數據類型的問題在于它表示兩個事件發生時間間隔的度量粒度是秒。這個問題將在稍后討論timestamp的時候被解決。可以使用TO_CHAR函數把DATE數據進行傳統地包裝,達到表示成多種格式的目的。

Oracle date 和 timestamp 區別
1 SQL> SELECT TO_CHAR(date1,'MM/DD/YYYY HH24:MI:SS') "Date" FROM date_table;2 3 Date 
4 --------------------------- 5 06/20/2003 16:55:14 6 06/26/2003 11:16:36
Oracle date 和 timestamp 區別

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

Oracle date 和 timestamp 區別
 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) weeks11   FROM date_table12 13 DATE1 DATE2 SECONDS MINUTES HOURS DAYS WEEKS 
14 ----------------- ----------------- ---------- ---------- ---------- ---------- ---------- 15 06202003:16:55:14 07082003:11:22:57 43 27 18 17 2 16 06262003:11:16:36 07082003:11:22:57 21 6 0 12 1
Oracle date 和 timestamp 區別
回到頂部

2.TIMESTAMP 數據類型

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

1 SQL> SELECT CAST(date1 AS TIMESTAMP) "Date" FROM t; 
2 Date 
3 ----------------------------------------------------- 4 20-JUN-03 04.55.14.000000 PM 
5 26-JUN-03 11.16.36.000000 AM

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

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

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

Oracle date 和 timestamp 區別
1 SELECT TO_CHAR(time1,'MM/DD/YYYY HH24:MI:SS:FF3') "Date" FROM date_table2 3 Date 
4 ----------------------- 5 06/20/2003 16:55:14:000 6 06/26/2003 11:16:36:000
Oracle date 和 timestamp 區別

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

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

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

回到頂部

3.系統日期和時間

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

1 SQL> SELECT SYSDATE FROM DUAL;

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

1 SQL> SELECT SYSTIMESTAMP FROM DUAL;

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

Oracle date 和 timestamp 區別
 1 SQL> ALTER SYSTEM SET fixed_date = '2003-01-01-10:00:00'; 
 2 System altered. 3  4 SQL> select sysdate from dual; 
 5 SYSDATE 
 6 ---------  7 01-JAN-03 8  9 SQL> select systimestamp from dual; 
10 SYSTIMESTAMP 
11 --------------------------------------------------------- 12 09-JUL-03 11.05.02.519000 AM -06:00
Oracle date 和 timestamp 區別
回到頂部

4.date和timestamp 的區別

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

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

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

timestamp是DATE類型的擴展,可以精確到小數秒(fractional_seconds_precision),可以是0 to9,缺省是6。兩個timestamp相減的話,不能直接的得到天數書,而是得到,
多少天,多少小時,多少秒等,例如:同樣查看一下當前距離倫敦奧運會開幕還有多長時間.

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

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

回到頂部

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

to_char來轉換 timestamp——>date:

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

date ——>timestamp:

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

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


作者: Orson            
出處: http://www.cnblogs.com/java-class/
如果,您認為閱讀這篇博客讓您有些收獲,不妨點擊一下右下角的 【推薦】
如果,您希望更容易地發現我的新博客,不妨點擊一下左下角的 【關注我】
如果,您對我的博客內容感興趣,請繼續關注我的后續博客,我是 【Orson】

本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段 聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

曲麻莱县| 岚皋县| 灌南县| 噶尔县| 沾益县| 张家口市| 浑源县| 墨脱县| 泰州市| 民丰县| 江阴市| 淮滨县| 佛坪县| 大石桥市| 卫辉市| 盐亭县| 思茅市| 石柱| 大理市| 尼勒克县| 阜康市| 望谟县| 苍梧县| 章丘市| 临清市| 鄂托克前旗| 浑源县| 道真| 红安县| 江源县| 门头沟区| 卓尼县| 新余市| 澄城县| 福州市| 日土县| 同江市| 江永县| 安图县| 桃源县| 福海县|